栈的应用
来源:互联网 发布:淘宝雪纺衫花色衬衣 编辑:程序博客网 时间:2024/06/07 05:36
一.数制转换
#include<stdio.h>#include<stdlib.h>#include<malloc.h>#define SIZE 100#define Length 10int e;typedef int SElemType;typedef struct{SElemType *base;SElemType *top;int size;}Sqstack;void InitStack(Sqstack &S){S.base=(SElemType *)malloc(SIZE*sizeof(SElemType));if(!S.base) exit(-1);S.top=S.base;S.size=SIZE;}int StackEmpty(Sqstack S){if(S.top==S.base) return 1;else return 0;}void push(Sqstack &S,SElemType e){if(S.top-S.base>=S.size){S.base=(SElemType *)realloc(S.base,(SIZE+Length)*sizeof(SElemType));if(!S.base) exit(-1);S.top=S.base+S.size;S.size+=Length;}*S.top++=e;}void pop(Sqstack &S){if(S.top==S.base) exit(-1);e=(*--S.top);}int main (){Sqstack S;int n,d;InitStack(S);while(~scanf("%d%d",&n,&d)){while(n){push(S,n%d);n=n/d;}while(!StackEmpty(S)){pop(S);printf("%d",e);}printf("\n");}return 0;}
#include<cstdio> #include<cstring> #include<stack>#include<iostream> using namespace std; int main() { stack<int>opnd; int n,d; while(cin>>n>>d){ while(n) {opnd.push(n%d); n=n/d; } while(!opnd.empty()) { cout<<opnd.top(); opnd.pop(); } cout<<endl;}return 0; }
二.表达式求值
#include<cstdio> #include<cstring> #include<stack>#include<iostream> using namespace std; int operate(int a,char op,int b) // 计算{ if(op=='+') return a+b; if(op=='-') return a-b; if(op=='*') return a*b; if(op=='/') return a/b; } char precede(char a,char b) // 比较优先级{ if(a=='+'||a=='-') { if(b=='+'||b=='-'||b==')'||b=='#') return '>'; if(b=='*'||b=='/'||b=='(') return '<'; } if(a=='*'||a=='/') { if(b=='+'||b=='-'||b==')'||b=='*'||b=='/'||b=='#') return '>'; if(b=='(') return '<'; } if(a=='('){ if(b=='+'||b=='-'||b=='*'||b=='/'||b=='(') return '<'; if(b==')') return '=';}if(a==')') if(b=='+'||b=='-'||b=='*'||b=='/'||b=='#'||b==')') return '>';if(a=='#') if(b=='+'||b=='-'||b=='*'||b=='/'||b=='#'||b=='(') return '<';} int In(char a) { if(a=='+'||a=='-'||a==')'||a=='('||a=='*'||a=='/'||a=='#') return 0; return 1; } int main() { stack<int>opnd; stack<char>optr; char c,ans; int num,flag; num=flag=0; optr.push('#'); c=getchar(); while(c!='#'||optr.top()!='#') { if(In(c)) { flag=1; num=num*10+c-'0'; // 处理多位数 c=getchar(); } else { if(flag==1) { flag=0; opnd.push(num); //数字(多位数)入栈 num=0; } ans=precede(optr.top(),c); if(ans=='<') { optr.push(c); c=getchar(); } if(ans=='=') { optr.pop(); c=getchar(); } if(ans=='>') { int num1,num2; char op; num2=opnd.top(); opnd.pop(); num1=opnd.top(); opnd.pop(); op=optr.top(); optr.pop(); cout<<num1<<' '<<op<<' '<<num2<<endl; //运算顺序 opnd.push(operate(num1,op,num2)); } } } cout<<opnd.top()<<endl; //最终结果 return 0; }
#include<stdio.h> #include<stdlib.h> #include<malloc.h> #include<iostream> using namespace std; #define SIZE 100 #define MAX 10 char x,a,b; typedef char SElemType; typedef struct { SElemType *base; SElemType *top; int size; }Sqstack; void InitStack(Sqstack &S) { S.base=(SElemType *)malloc(SIZE*sizeof(SElemType)); if(!S.base) exit(-1); S.top=S.base; S.size=SIZE; } char GetTop(Sqstack S) { char e; if(S.top==S.base) exit(-1); e=*(S.top-1); return e; } void push(Sqstack &S,SElemType e) { if(S.top-S.base>=S.size) { S.base=(SElemType *)realloc(S.base,(SIZE+MAX)*sizeof(SElemType)); if(!S.base) exit(-1); S.top=S.base+S.size; S.size+=MAX; } *S.top++=e; } void pop(Sqstack &S,SElemType &e) { if(S.top==S.base) exit(-1); e=*--S.top; } bool in(char a) { if(a>='0'&&a<='9') return true; return false; } char pre(char a,char b) { if(a=='+'||a=='-') { if(b=='+'||b=='-'||b==')'||b=='#') return '>'; if(b=='*'||b=='/'||b=='(') return '<'; } if(a=='*'||a=='/') { if(b=='+'||b=='-'||b==')'||b=='*'||b=='/'||b=='#') return '>'; if(b=='(') return '<'; } if(a=='(') { if(b=='+'||b=='-'||b=='*'||b=='/'||b=='(') return '<'; if(b==')') return '='; } if(a==')') { if(b=='+'||b=='-'||b=='*'||b=='/'||b=='#'||b==')') return '>'; } if(a=='#') { if(b=='+'||b=='-'||b=='*'||b=='/'||b=='#'||b=='(') return '<'; } } int operate(char a,char op,char b) { int c,d; c=a-'0'; d=b-'0'; if(op=='+') return c+d; if(op=='-') return c-d; if(op=='*') return c*d; if(op=='/') return c/d; } int main () { char c; Sqstack optr; Sqstack opnd; InitStack(optr); push(optr,'#'); InitStack(opnd); c=getchar(); while(c!='#'||GetTop(optr)!='#') { if(in(c)) { push(opnd,c); c=getchar(); } else { switch(pre(GetTop(optr),c)) { case'<': push(optr,c); c=getchar(); break; case'=':pop(optr,c); c=getchar(); break; case'>':pop(optr,x); pop(opnd,b); pop(opnd,a); push(opnd,operate(a,x,b)+'0'); break; } } } cout<<GetTop(opnd)-'0'<<endl; return 0; }
#include<stdio.h> #include<stdlib.h> #include<malloc.h> #include<iostream> using namespace std; #define SIZE 100 #define MAX 10 char x;int a,b; typedef char SElemType; typedef struct { SElemType *base; SElemType *top; int size; }Sqstack; // 存字符型typedef struct { int *base; int *top; int size; }Sqstack1; //存整形void InitStack(Sqstack &S) { S.base=(SElemType *)malloc(SIZE*sizeof(SElemType)); if(!S.base) exit(-1); S.top=S.base; S.size=SIZE; } void InitStack1(Sqstack1 &S) { S.base=(int *)malloc(SIZE*sizeof(int)); if(!S.base) exit(-1); S.top=S.base; S.size=SIZE; } // 初始化 char GetTop(Sqstack S) { char e; if(S.top==S.base) exit(-1); e=*(S.top-1); return e; } int GetTop1(Sqstack1 S) { int e; if(S.top==S.base) exit(-1); e=*(S.top-1); return e; } //取栈顶元素void push(Sqstack &S,SElemType e) { if(S.top-S.base>=S.size) { S.base=(SElemType *)realloc(S.base,(SIZE+MAX)*sizeof(SElemType)); if(!S.base) exit(-1); S.top=S.base+S.size; S.size+=MAX; } *S.top++=e; } void push1(Sqstack1 &S,int e) { if(S.top-S.base>=S.size) { S.base=(int *)realloc(S.base,(SIZE+MAX)*sizeof(int)); if(!S.base) exit(-1); S.top=S.base+S.size; S.size+=MAX; } *S.top++=e; } // 入栈 void pop(Sqstack &S,SElemType &e) { if(S.top==S.base) exit(-1); e=*--S.top; } void pop1(Sqstack1 &S,int &e) { if(S.top==S.base) exit(-1); e=*--S.top; } // 出栈bool in(char a) { if(a>='0'&&a<='9') return true; return false; } char pre(char a,char b) { if(a=='+'||a=='-') { if(b=='+'||b=='-'||b==')'||b=='#') return '>'; if(b=='*'||b=='/'||b=='(') return '<'; } if(a=='*'||a=='/') { if(b=='+'||b=='-'||b==')'||b=='*'||b=='/'||b=='#') return '>'; if(b=='(') return '<'; } if(a=='(') { if(b=='+'||b=='-'||b=='*'||b=='/'||b=='(') return '<'; if(b==')') return '='; } if(a==')') { if(b=='+'||b=='-'||b=='*'||b=='/'||b=='#'||b==')') return '>'; } if(a=='#') { if(b=='+'||b=='-'||b=='*'||b=='/'||b=='#'||b=='(') return '<'; } } int operate(int c,char op,int d) { if(op=='+') return c+d; if(op=='-') return c-d; if(op=='*') return c*d; if(op=='/') return c/d; } int main () { int flag,sum;char c; Sqstack optr; // 运算符Sqstack1 opnd; // 运算数InitStack(optr); push(optr,'#'); InitStack1(opnd); c=getchar(); flag=sum=0;while(c!='#'||GetTop(optr)!='#') { if(in(c)) { flag=1;sum=sum*10+c-'0'; // 处理多位数 c=getchar(); } else { if(flag){ flag=0; push1(opnd,sum); sum=0;}switch(pre(GetTop(optr),c)) { case'<': push(optr,c); c=getchar(); break; case'=':pop(optr,c); c=getchar(); break; case'>':pop(optr,x); pop1(opnd,b); pop1(opnd,a); push1(opnd,operate(a,x,b)); break; } } } cout<<GetTop1(opnd)<<endl; return 0; }
三.括号匹配问题
#include<stdio.h>#include<stdlib.h>#include<malloc.h>#include<iostream>using namespace std;#define S_SIZE 100 //栈的空间大小 #define STACKINCREAMENT 10//增加空间 char e;struct SqStack{ char *base; //栈底 char *top; //栈顶 int stacksize; //栈当前的存储空间 }; void InitStack(SqStack &S) {S.base=(char *)malloc(S_SIZE*sizeof(char)); S.stacksize=S_SIZE; S.top=S.base;//初始化空栈 } int StackEmpty(SqStack S) { if(S.base==S.top) return 1; else return 0; } void push(SqStack &S,char e) { if(S.top-S.base>=S.stacksize) {S.base=(char *)realloc(S.base,(S.stacksize+STACKINCREAMENT)*sizeof(char)); S.top=S.base+S.stacksize; S.stacksize+=STACKINCREAMENT;} *(S.top)=e; S.top++; } void pop(SqStack &S,char &e) { if(S.base!=S.top) {S.top--; e=*S.top;} } int main (){ SqStack s; InitStack(s); char c[100]; gets(c); int i=0; while(i<strlen(c)) { switch(c[i]){case '(':case '[':case '{':push(s,c[i++]);break; case ')':case ']':case '}':pop(s,e); if((e=='{' && c[i]=='}') ||(e=='[' && c[i]==']') || (e=='(' &&c[i]==')')) i++; else { printf("括号匹配不成功\n"); exit(-1); } break; default:i++;} } if(StackEmpty(s)) printf("括号匹配成功"); else printf("括号匹配不成功"); printf("\n"); return 0;}
#include<stdio.h>#include<string.h>#include<stack>int main (){ stack<char> s; char c[100]; gets(c); int i=0; while(i<strlen(c)) { switch(c[i]){case '(':case '[':case '{':s.push(c[i++]);break; case ')':case ']':case '}':if((s.top()=='{' && c[i]=='}') ||(s.top()=='[' && c[i]==']') || (s.top()=='(' &&c[i]==')')) { i++; s.pop(); } else printf("括号匹配不成功\n"); break; default:i++;} } if(s.empty()) printf("括号匹配成功"); else printf("括号匹配不成功"); printf("\n"); return 0;}
2 0
- 栈&栈的应用
- 栈的应用
- 栈的应用
- 简单的栈应用
- 栈的应用
- 栈的简单应用
- 栈的应用
- 栈的应用
- hdu1022栈的应用
- 栈的应用举例
- 栈的应用
- 栈的简单应用
- 数据结构栈的应用
- 栈的简单应用
- 栈的简单应用
- 栈的应用
- 栈的应用
- 栈的经典应用
- GridControl详解(一)原汁原味的表格展示
- C语言知识查漏补缺与心得体会(1)
- POJ-1321-棋盘问题
- 编译指令page覆盖meta设置
- 更新ZTE N880E手机的MAC地址
- 栈的应用
- 5.Maven和Eclipse整合(两种方式进行插件的安装),Maven相关设置,Eclipse下创建Maven项目
- C#PopStar【消除类】
- (SRC)基于稀疏表示的人脸识别
- poj 1328Radar Installation
- GridControl详解(二)表格的列名配置
- JSP的九种内置对象
- eclipse 用Spring Tool Suite简化你的开发
- GridControl详解(三)列数据的格式设置