c语言迷宫旅行游戏用栈的知识详细版
创始人
2024-10-23 03:36:59
0

一、用C语言编写函数实现顺序栈的进栈、退栈、取栈顶的算法。

#include

#define stacksize 100//假定预分配的栈空间最多为100个元素

typedef char elementtype;//假定栈元素的数据类型为字符,在此处可以自行设置

typedef struct

{

elementtype data[stacksize];

int top;

}seqstack;

//置空栈

void initstack(seqstack*s)

{

s->top=-1;

//解释一下,s->top指向的是当前栈顶元素的位置

//当要向栈中添加一个新元素时,要先将s->top增加1,

//此时s->top指向的就是新元素要添加的位置了。

//所以当栈为空时,填加第一元素时,top加1后

//s->top的值就变为0,也就是第一个元素的位置了。

}

//判栈空

int stackempty(seqstack*s)

{

if(s->top==-1)

return 1;//若相等就返回1,否则为0

else return 0;

}

//入栈

void push(seqstack*s,elementtype x)

{

if(s->top==stacksize-1)//进栈前判断栈是否已经满了

printf(" stack overflow\n");

else

{

s->top= s->top+ 1;

s->data[s->top]=x;

}

}

//出栈

elementtype pop(seqstack*s)

{

if(stackempty(s))//出栈前先判断当前栈中是否有内容

printf("stack is empty\n");

else

{

return s->data[s->top--];//出栈后s->top的值会自减1

}

}

//取栈顶元素(只是想知道栈顶的值,并没有出栈)

elementtype gettop(seqstack*s)

{

if(stackempty(s))

{

printf("stack already empty.\n");

}

else return s->data[s->top];

}

int main()

{

elementtype x;

seqstack*s;//定义一个栈,用指针的方式定义的

initstack(s);//想初始化定义好的栈

//当栈为空时调用出栈操作

pop(s);

//向栈中添加一个元素a

push(s,'a');

//观察此时的栈顶元素

x=gettop(s);

printf("%c\n",x);

//再添加一个元素b

push(s,'b');

//观察此时的栈顶元素

x=gettop(s);

printf("%c\n",x);

//弹出栈顶的元素

x=pop(s);

printf("%c\n",x);

//观察弹出后栈顶元素的变化情况

x=gettop(s);

printf("%c\n",x);

return 0;

}

二、用C语言把十进制转换为8进制,最好用栈结构

用系统栈(递归)实现转换的函数:

系统递归函数在调用时,如果输出语句是在调用语句的后面时,则输出部分是放入系统栈中的(须等到递归调用返回时,才轮到输出语句的执行)。使用递归函数的优点是程序编写简单,压栈与退栈操作由系统完成,特别适合于问题本身具有递归的特点。缺点是效率上比非递归的要差些。

#include

void dec2oct(int x)//将十进制数x转化为8进制数输出

{if(x>7)dec2oct(x/8);//如果 x不止一位8进制数,则先处理其高位部分

printf("%d",x%8);//递归返回时再输出 x的最低位

}

int main()

{int x;

scanf("%d",&x);//读入要转换的十进制数x

dec2oct(x);//将 x转换为8进制数输出

return 0;

}

三、C语言 任意表达式求值。(栈的应用

/***只适合整数的表达式求值***/

/***其中部分可作修改,表达式也可是输入的***/

#include"iostream.h"

const int n0=30;

int s1[n0+1];//操作数栈

char s2[n0+1];//运算符栈

int t1,t2;

int num[4];//提取表达式中的整数

void calcu()//一次计算

{

int x1,x2,x;

char p;

//弹出一个运算符

p=s2[t2--];

//弹出两个操作数

x2=s1[t1--];

x1=s1[t1--];

//进行一次运算

switch(p){

case'+':x=x1+x2;break;

case'-':x=x1-x2;break;

case'*':x=x1*x2;break;

case'/':x=x1/x2;

}

//结果压入操作数栈

s1[++t1]=x;

}

int calculator(char*f)

{

int v,i=0;

char*p=f;

t1=t2=0;//设置空栈

while(*p!='\0')

switch(*p){

case'+': case'-':

while(t2&&(s2[t2]!='('))

//执行先遇到的加、减、乘、除运算

calcu();

//当前运算符进栈

s2[++t2]=*p;

//读下一个字符

p++;

break;

case'*': case'/':

if(t2&&(s2[t2]=='*')||(s2[t2]=='/'))

//执行先遇到的乘、除运算

calcu();

//当前运算符进栈

s2[++t2]=*p;

//读下一个字符

p++;

break;

case'(':

//左括号进栈

s2[++t2]=*p;

//读下一个字符

p++;

break;

case')':

while(s2[t2]!='(')

//执行括号内的加、减、乘、除运算

calcu();

//弹出左括号

t2--;

//读下一个字符

p++;

break;

default:

//把字符串转换成整数值

v=0;

do{

v=10*v+*p-'0';

p++;

} while((*p>='0')&&(*p<='9'));

//操作数进栈

s1[++t1]=v;

num[i++]=v;

};

//执行先遇到的加、减、乘、除运算

while(t2) calcu();

//返回结果

return s1[t1];

}

void main()

{

char a[]="5*(40+6)-39";

cout<

cout<<"其中的数字为:\n";

for(int i=0;i<4;i++)

{

cout<

}

cout<

}

原来做过的东西,是C++的,VC++6.0环境下调试运行成功。

相关内容

热门资讯

超级玛丽三代游戏知识讲解 一、网络单机游戏超级玛丽,为什么通关时必须要摘下旗子我相信小时候大家都有玩过或者是听过这款非常经典的...
猜歌猜知识的游戏规则 一、猜歌名游戏规则有哪些1、本轮游戏共需20人参加,分成两组,每组十人。2、当主持人放出音乐后,猜到...
cf游戏安全知识答题全部正确答... 一、cf生化大赏答案大全2023cf生化奖励活动的答案是什么?2023年最新答题活动已经开始。玩家可...
设计一款游戏需要什么知识 一、游戏设计需要什么基础游戏设计需要的基础:1、知识基础:游戏设计原理、用户体验设计程序与方法、二维...
三年级测量知识的游戏题目 一、三年级测量周长的三种方法三年级测量周长的三种方法包括直接测量、使用长度单位和利用比例关系。1、直...
奇怪的冷知识游戏下载中文 一、你知道哪些关于游戏中的奇怪冷知识许多网友们在玩游戏的时候都会总结一些游戏当中的冷知识,将这些知识...
普及艾滋病知识的游戏 一、预防艾滋病的活动方案为了确定活动的圆满进行,时常需要预先制定一份周密的活动方案,一份好的活动方案...
能源利用的理论知识游戏 一、飞船太空采集能源的游戏下载地址:类型:安卓游戏-冒险解谜版本:v0.1大小:61.41M语言:中...
能科普知识的小游戏下载 一、让你爱不释手的益智类小游戏有哪些游戏市场现如今可谓竞争激烈,每一款游戏也是极尽自己的能力,想打造...
扩大知识面游戏有哪些类型 一、工作之余,有哪些能够很好地拓展知识面的手机小游戏在现在这个游戏横生的时代,游戏从一开始简单的单机...