首页 栈的入栈、出栈、获取栈顶的c语言算法

栈的入栈、出栈、获取栈顶的c语言算法

举报
开通vip

栈的入栈、出栈、获取栈顶的c语言算法^include#include#include#include#defineMAX100charstock[NIAX];iiittop=-l;chara[MAX],b[MAX];charexp[100];iiitoperand1=0;iiitoperand2=0;iiitiesult=0;iiitpos=0;//定义一个节点的结构tvpedefstmctnode//定义操作数//定义操作数//定义操作结果变量//目前表达式位置iiitmember;〃数据域stmctnode*pNext^/指针域}Node,*pN...

栈的入栈、出栈、获取栈顶的c语言算法
^include#include#include#include#defineMAX100charstock[NIAX];iiittop=-l;chara[MAX],b[MAX];charexp[100];iiitoperand1=0;iiitoperand2=0;iiitiesult=0;iiitpos=0;//定义一个节点的结构tvpedefstmctnode//定义操作数//定义操作数//定义操作结果变量//目前表达式位置iiitmember;〃数据域stmctnode*pNext^/指针域}Node,*pNode;//定义一个栈结构tvpedefstmctstack{pNodeTop;pNodeBottom;}Stack.*pStack;voidInitStack(pStack);boolPush(pStack,char);voidTraverseStack(pStack);boolEmpty(pStack);iiitPop(pStack);voidCleai(pStack);voidcaidanQ;voidfun(chara[],charb[]);〃栈顶〃栈底//初始化栈的函数//进行入栈操作的函数//遍历栈函数//判断栈是否为空的函数//进行出栈操作的函数//清空栈的函数〃显示菜单〃中序转后序函数mtmam(void){Stacks;chai-c;inti;iiitnum;chai-data;chai-ie_num://定义一个栈//临时保存用户输入的数据//保存Pop函数的返回值pnntf(M*4—遍历栈中元素并显示栈顶元素*\nH);printf(M*5—清空栈pnntf(-*6-栈的中序转后序pnntf(M*7—栈后序表达式的计算叫T);while(l)pnntf(”请选择你要进行的操作鋼;mtk;scanfT%d=&k);switch(k){casel:InitStack(&s);break;case2:printf(”请输入你准备输入数据的个数:”);scanff%d・;&num);for(i=0;i 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 表达式字符串{if(isoperator(exp[pos]))//是运算符,取两个操作数pop(&operand2);pop(&operandl);push(get\-alue(exp[pos],operand1.operand2));}elsepush(exp[pos]-48);pos++;//是操作数,压入操作数栈//移到下一个字符串//弹出结果//输出位置pop(&result);prmtf(n%d\nM.result);};case8:caidanQ;break;case序结束!H);bieak;}printf(M\nM);return0;}//进行栈的初始化的函数//分配内存空间给栈顶voidInitStack(pStackps)ps->Top=(pNode)nialloc(sizeof(Node));if(NULL==ps->Top)pnnrff动态分配内存失败E);exit(-l);}elseps->Bottom=ps->Top;ps->Top->pNext=NULL;//使栈底也指向栈顶空间//栈顶指针置为NULL:}pnmf(”栈已经进行了初始化!”);pnntf(M\nM);return;进行入栈操作的函数//boolPush(pStackps.chardata)pNodepNew=(pNode)malloc(sizeof(Node));间if(NULL==pNew)//定义一个新节点,并分配内存空retuinfalse;}pNew->member=data;member成员pNew->pNext=ps->Top;ps->Top=pNew;pnntf(M\nM);letuintine;}//////把要进栈的数据赋给新节点的使新节点的指针指向栈顶把新节点作为新栈顶//遍历栈的函数voidTraverseStack(pStackps)pNodepNew=ps->Top;if(Empty(ps))〃判断栈是否为空,为空就不能进行出栈操作pnntf(”栈己为空!\iT);}else{pnmf(”栈顶元素为鋼;n%c\n,\pNew->membei);//只要栈顶不等于栈底,循环//打印栈顶的成员member//栈顶指针向下移动一次pnntf("栈内的元素有:”);while(pNew?=ps->Bottom){prmtf(H%c'\pNew->membei);pNew=pNew->pNext;}}pnntf(M\nM);return;}//判断栈是否为空boolEmpty(pStackps){if(ps->Top—ps->Bottom)//栈顶等于栈底,不就是栈中没数据么{retuintine;}else{returnfalse;}}//进行出栈操作函数iiitPop(pStackps){pNodepSwap=NULL;iiitiemin_val;if(Empty(ps))〃判断栈是否为空,为空就不能进行出栈操作{栈中数据不足无法完整出栈!\n”);}elseretuin_val=ps->Top・>member;做为函数返回值pSwap=ps->Top;ps->Top=ps->Top->pNext;fiee(pSwap);retuinreturn.val;}}//清空栈的函数voidCleai(pStackps){pNodepNew=NULL;wliile(ps->Top!=ps->Bottom){pNew=ps->Top;ps->Top=ps->Top->pNext;fiee(pNew);}pnntf(-a已清空!\n“);return;}〃显示菜单函数//把栈顶的成员member的值赋给retuin^val//使pSwap指向栈顶//使栈顶指向栈顶卞一个节点//释放以前的栈顶空间//栈顶和栈底不等,循环//使一个新节点和栈顶指向同一空间//使栈顶指向栈顶的下一个节点//释放掉以前的栈顶空间voidcaidanQprintf(M**************************************^nH)・printf(M*1—初始化栈printf(M*2—入栈printf(M*3—出栈4—遍历栈中元素并显示栈顶元素*\n");piintfC**5—清空栈*\n");TOC\o"1-5"\h\zpnntf(-*6—栈的中序转后序恤”);printfC1*7—栈后序表达式的计算恤”);pnntf(-*8—退出程序*5”);printf(M*9—显示菜单printf(M**************************************^nH)・〃中序转后序函数voidfun(chara[],charb[]){mtijenj;len=stilen(a);j=";fbr(i=O;i=0&&stock[top]!=(')b[++j]=stock[top-];stock[-H-top]~:stock[++top]=a[i];break;case7f:wlule(top>=0&&stock[top]!='(■&&stock[top]!=屮&&stockftop]?--)b[++j]=stock[top-];stock[+-rtop]=,:stock[+-rtop]=a[i];break;case*),:while(stock[top]!=*(*)b[++j]=stock[top-];top—;break;default:b[++j]=a[i];if(i==len-l)b[++j]=:break;elseif(a[i+l]<=,0r||a[i+l]>=9,)b[++j]=‘:while(top>=0)b[++j]=stock[top-];b[++j]=”\O:for(i=0;i<=j;i-H-)pnntfC%c役b[i]);iiitget\Talue(intopjntoperand1、intoperand2)//计算表达式彳皮//定义操作数//定义操作数//定义操作结果变量//目前表达式位置charexp[100];intopeiandl=0;intoperand2=0;intresult=O;intpos=0;switch((char)op){case1*1:iemin(operand1*opeiaiid2);case?1:return(opeiandl/operand2);case屮:ieturn(opeiand1+operand2);casCreturn(operand1-operand2);}}
本文档为【栈的入栈、出栈、获取栈顶的c语言算法】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_769254
暂无简介~
格式:doc
大小:44KB
软件:Word
页数:8
分类:
上传时间:2020-09-18
浏览量:4