栈的基本操作
来源:互联网 发布:不用充值约爱软件 编辑:程序博客网 时间:2024/05/17 18:26
#include<iostream>#define STACK_INIT_SIZE 100//存储空间初始分配量 #define STACKINCREAMENT 10 //存储空间分配增量 using namespace std;typedef struct{ int *base;//若base=NULL,则栈不存在 int *top; int stacksize; //当前已分配的空间 }SqStack; int InitStack(SqStack &S){//构造一个空栈 S.base=(int *)malloc(STACK_INIT_SIZE*sizeof(int)); if(!S.base) return 1; //存储分配失败 S.stacksize=STACK_INIT_SIZE; S.top=S.base;//初始化空栈 return 0; }int StackEmpty(SqStack S) //判断栈是否空 { if(S.base==S.top) return 1; else return 0; } int Push(SqStack &S,int e) //插入元素e为新的栈顶元素 { if(S.top-S.base>=S.stacksize){//栈满,追加存储空间 S.base=(int *)realloc(S.base,(S.stacksize+STACKINCREAMENT)*sizeof(int)); if(!S.base) return 1;//存储分配失败 S.top=S.base+S.stacksize; S.stacksize+=STACKINCREAMENT; } *(S.top)=e; S.top++; return 0;} void pop(SqStack &S,int &e) //出栈 { if(S.base!=S.top){ S.top--; e=*S.top; } } int GetTop(SqStack S,int &e){//若栈不空,返回栈顶元素 if(S.top==S.base) return 1; e=*(S.top-1); return 0; }
十进制转二进制
void conversion(){//十进制转二进制 int n,e; SqStack S; InitStack(S); cout<<"请输入一个十进制数"<<endl; cin>>n; while(n){ Push(S,n%2); n=n/2; } while(!StackEmpty(S)){ pop(S,e); cout<<e; }}
括号匹配
#include <stdio.h> #include <process.h> //exit()void kuohao(){ SqStack s;//初始化空栈 InitStack(s); char ch[100],*p;int e; p=ch; printf("输一个含义有()[]{}的括号表达式:\n"); gets(ch); while(*p) { switch (*p) { case '{': case '[': case '(': Push(s,*p++);break;//只要是左括号就入栈 case '}': case ']': case ')':pop(s,e); if ((e=='{' && *p=='}') ||(e=='[' && *p==']') || (e=='(' && *p==')')) p++; else {printf("括号不匹配****!");exit(1);} break; default :p++;//其他字符就后移 } } if (StackEmpty(s)) printf("括号匹配成功"); }
阅读全文