ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:18.60KB ,
资源ID:9719390      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9719390.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(演示堆栈过程.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

演示堆栈过程.docx

1、演示堆栈过程#include #include #include #include #define MAX 100char stockMAX;int top=-1;char aMAX,bMAX;char exp100;int operand1=0; / 定义操作数int operand2=0; / 定义操作数int result=0; / 定义操作结果变量int pos=0; / 目前表达式位置/ 定义一个节点的结构typedef struct node int member; /数据域 struct node * pNext;/指针域Node,*pNode;/ 定义一个栈结构typedef

2、struct stack pNode Top; /栈顶 pNode Bottom; /栈底Stack,* pStack;void InitStack(pStack ); / 初始化栈的函数bool Push(pStack ,char); / 进行入栈操作的函数void TraverseStack(pStack ); / 遍历栈函数bool Empty(pStack ); / 判断栈是否为空的函数int Pop(pStack ); / 进行出栈操作的函数void Clear(pStack ); / 清空栈的函数void caidan(); /显示菜单void fun( char a,char b

3、); /中序转后序函数int main(void) Stack s; / 定义一个栈 char c; int i; int num; char data; / 临时保存用户输入的数据 char re_num; / 保存Pop函数的返回值 printf(*n); printf(* 1初始化栈 *n); printf(* 2入栈 *n); printf(* 3出栈 *n); printf(* 4遍历栈中元素并显示栈顶元素*n); printf(* 5清空栈 *n); printf(* 6栈的中序转后序 *n); printf(* 7栈后序表达式的计算 *n); printf(* 8退出程序 *n)

4、; printf(* 9显示菜单 *n); printf(*n); while(1) printf(请选择你要进行的操作:); int k; scanf(%d,&k); switch(k) case 1:InitStack(&s);break; case 2:printf(请输入你准备输入数据的个数:); scanf(%d,&num); for (i = 0;i num;i+) printf(第 %d 个字符:,i+1); getchar(c); scanf(%c,&data); if (Push(&s,data) / 调用Push函数 continue; else printf(进行进栈操作

5、失败!n); exit(-1); ;break; case 3:printf(请输入你准备出出栈的字符个数: ); scanf(%d,&data); if (Empty(&s) /判断栈是否为空,为空就不能进行出栈操作 printf(栈已为空!n); else printf(你去掉的数字是:); for (i = 0; i Top = (pNode)malloc(sizeof(Node); / 分配内存空间给栈顶 if (NULL = ps-Top) printf(动态分配内存失败n); exit(-1); else ps-Bottom = ps-Top; / 使栈底也指向栈顶空间 ps-To

6、p-pNext = NULL; / 栈顶指针置为NULL; printf(栈已经进行了初始化!); printf(n); return ;/ 进行入栈操作的函数bool Push(pStack ps,char data) pNode pNew = (pNode)malloc(sizeof(Node); / 定义一个新节点,并分配内存空间 if (NULL = pNew) return false; pNew-member = data; / 把要进栈的数据赋给新节点的member成员 pNew-pNext = ps-Top; / 使新节点的指针指向栈顶 ps-Top = pNew; / 把新节

7、点作为新栈顶 printf(n); return true;/ 遍历栈的函数void TraverseStack(pStack ps) pNode pNew = ps-Top; if (Empty(ps) /判断栈是否为空,为空就不能进行出栈操作 printf(栈已为空!n); else printf(栈顶元素为:); printf(%cn,pNew-member); printf(栈内的元素有:); while(pNew!= ps-Bottom) / 只要栈顶不等于栈底,循环 printf(%c ,pNew-member); / 打印栈顶的成员member pNew = pNew-pNext

8、; / 栈顶指针向下移动一次 printf(n); return ;/ 判断栈是否为空bool Empty(pStack ps) if(ps-Top = ps-Bottom) / 栈顶等于栈底,不就是栈中没数据么 return true; else return false; printf(n);/ 进行出栈操作函数int Pop(pStack ps) pNode pSwap = NULL; int return_val; if (Empty(ps) /判断栈是否为空,为空就不能进行出栈操作 printf(n栈中数据不足无法完整出栈!n); else return_val = ps-Top-m

9、ember; / 把栈顶的成员member的值赋给return_val做为函数返回值 pSwap = ps-Top; / 使pSwap指向栈顶 ps-Top = ps-Top-pNext; / 使栈顶指向栈顶下一个节点 free(pSwap); / 释放以前的栈顶空间 return return_val; printf(n);/ 清空栈的函数void Clear(pStack ps) pNode pNew = NULL; while (ps-Top != ps-Bottom) / 栈顶和栈底不等,循环 pNew = ps-Top; / 使一个新节点和栈顶指向同一空间 ps-Top = ps-T

10、op-pNext; / 使栈顶指向栈顶的下一个节点 free(pNew); / 释放掉以前的栈顶空间 printf(栈已清空!n); return ;/显示菜单函数void caidan() printf(*n); printf(* 1初始化栈 *n); printf(* 2入栈 *n); printf(* 3出栈 *n); printf(* 4遍历栈中元素并显示栈顶元素*n); printf(* 5清空栈 *n); printf(* 6栈的中序转后序 *n); printf(* 7栈后序表达式的计算 *n); printf(* 8退出程序 *n); printf(* 9显示菜单 *n); p

11、rintf(*n);/中序转后序函数void fun( char a,char b) int i,len,j; len=strlen(a); j=-1; for(i=0;i=0&stocktop!=() b+j=stocktop-; stock+top= ; stock+top=ai; break; case *: case /:while(top=0&stocktop!=(&stocktop!=+&stocktop!=-) b+j=stocktop-; stock+top= ; stock+top=ai; break; case):while(stocktop!=() b+j=stockto

12、p-; top-; break; default: b+j=ai; if(i=len-1) b+j= ; break; else if(ai+1=9) b+j= ; while(top=0) b+j=stocktop-; b+j=0; for(i=0;i=j;i+) printf(%c,bi);int getvalue(int op,int operand1,int operand2) / 计算表达式值 char exp100; int operand1=0; / 定义操作数 int operand2=0; / 定义操作数 int result=0; / 定义操作结果变量 int pos=0;

13、 / 目前表达式位置 switch(char)op) case*: return(operand1*operand2); case/: return(operand1/operand2); case+: return(operand1+operand2); case-: return(operand1-operand2); 演示堆栈过程#include#include#include#includevoid Push(int d);int Pop(void);int main(void) int value; char str100; do printf(Enter value); gets(

14、str); if(strcmp(str,pop)!=0) value=atoi(str); Push(value); else printf(value on top is %dn,Pop(); while(strcmp(str,quit)!=0); system(PAUSE); return 0;#define MAXSIZE 100int bottomSP=0;int sp=0;int stackMAXSIZE; void Push(int d) sp+; if(sp=(bottomSP+MAXSIZE); puts(Stack Overflow.n); exit(1); stacksp=

15、d;int Pop(void) if(sp=bottomSP) puts(Stack underflow.n); exit(1); system(PAUSE); return stacksp-;题 目: 后缀表达式求值 #include #include struct node / 栈结构声明 int data; / 数据域 struct node *next; / 指针域 ; typedef struct node stacklist; / 链表新类型 typedef stacklist *link; / 链表指新针类型 link operand=NULL; / 操作数栈指针 void pu

16、sh( int value) / 进栈,存入数据 link newnode; / 新结点指针 newnode=new stacklist; / 分配新结点 if (!newnode) printf(分配失败!); / 存入失败 return ; newnode-data=value; / 创建结点的内容 newnode-next=operand; operand=newnode; / 新结点成为栈的开始 return ; void pop(int *value) / 出栈,取出数据 link top; / 指向栈顶 if (operand !=NULL) top=operand; / 指向栈顶

17、 operand=operand-next; / 移动栈顶指针,指向下一个结点 *value=top-data; / 取数据 delete top; / 吸收结点 else *value=-1; int empty() / 判栈空 实用数据结构基础实验报告 - 3 - if (operand!=NULL) return 1; else return 0; int isoperator(char op) / 判运算符 switch (op) case+: case-: case*: case/: return 1; / 是运算符,返回 default: return 0; / 不是运算符,返回

18、int getvalue(int op,int operand1,int operand2) / 计算表达式值 switch(char)op) case*: return(operand1*operand2); case/: return(operand1/operand2); case+: return(operand1+operand2); case-: return(operand1-operand2); void main() / 主函数 char exp100; int operand1=0; / 定义操作数 int operand2=0; / 定义操作数 int result=0;

19、 / 定义操作结果变量 int pos=0; / 目前表达式位置 printf(tn 请输入后缀表达式:); gets(exp); /cin.getline(exp,81) / 读取后缀表达式 printf(tnn 后缀表达式%s的结果是:,exp); while (exppos !=0 & exppos !=n) / 分析表达式字符串 if (isoperator(exppos) / 是运算符,取两个操作数 pop(&operand2); pop(&operand1); push(getvalue(exppos,operand1,operand2); else push(exppos-48); / 是操作数,压入操作数栈 pos+; / 移到下一个字符串位置 pop(&result); / 弹出结果 - 4 - printf(%dn,result); / 输出

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1