尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

数据结构笔记(C++,栈的应用代码)

数据结构笔记(C++,栈的应用代码) 栈的应用n的阶乘进制转换汉诺塔斐波那契回文判断跳台阶问题画二维表格)双栈实现混合四则运算表达式后缀求表达式的值应用--括号配对单栈操作1初始化一个空栈2从左到右以次读括号读到左括号则左括号入栈读到右括号若栈空则匹配失败若栈不为空取出栈顶字符3读完所有元素栈为空则配对成功栈不为空存在多余左括号匹配失败//括号配对 int match(char exp[],int n){ char stack[MaxSize];int top-1;//两句话完成栈的声明和初始化 //考试这样写节省时间 for(int i1;in;i){ if(exp[i]()stack[top](;//1、如果遇到就入栈 if(exp[i])){ if(top-1)return 0;//2、如果遇到并且栈已经空就不匹配 else --top;//3、如果栈不空就出栈完成一次括号匹配 } } if(top-1)return 1;//栈空所有括号被处理掉是匹配的 else return 0; }双栈操作做表达式求值1初始化操作数栈、符号栈2从左到右以次读表达式读到左括号则左括号入栈读到右括号弹出一个运算符两个操作数做运算知道符号栈栈顶为左括号弹出读到操作数压入操作数栈读到运算符和符号栈栈顶元素比较优先级栈顶优先级高则先运算否则入栈3读完表达式完成剩余运算//后缀式的求值 int op(int a,char op,int b){//本函数是运算函数完成a op b 的运算 if(op)return ab; if(op-)return a-b; if(op*)return a*b; if(op/){ if(b0){ coutERRORendl;//这里需要判断除数为0是错误的 return 0; } else{ return a/b; } } } int com(char exp[]){//本函数是后缀式计算函数 int a,b,c; int stack[MaxSize];int top-1; char op; for(int i-0;exp[i]!\0;i){ if(exp[i]0exp[i]9)stack[top]exp[i]-0;//字符型和整形的转换 else{ opexp[i]; bstack[top--]; astack[top--]; cop(a,op,b); stack[top]c; } } return stack[top]; }链栈操作用不带头节点的单链表存储栈//用不带头节点的单链表存储栈 void InitStackl(LNode *lst){//初始化栈 lstNULL;//不带头节点带的话时lst-nextNULL } int isEmptyl(LNode *lst){//判断栈是否为空 if(lstNULL)return 1; else return 0; } void Pushl(LNode *lst,int x){//进栈 LNode *p; p(LNode *)malloc(sizeof(LNode)); p-nextNULL; p-datax; /*下面是插入操作*/ p-nextlst; lstp; } void Popl(LNode *lst,int x){//出栈 LNode *p; if(lstNULL)return 0; plst; /*删除节点的操作*/ xp-data; lstp-next; free(p); return 1; }
返回列表