栈的实现,进制数转换以及符号匹配

//seqstack.h#ifndef _SEQSTACK_H#define _SEQSTACK_H#define STACK_SIZE 20typedef int ElemType; //若要使用功能5 请将int 改为char#include<iostream>#include<assert.h>using namespace std;typedef struct Stack{ ElemType *base; int capacity; int top;}Stack;/////////////////////////////////bool Isfull(Stack *sta){ return sta->top < sta->capacity;}bool IsEmpty(Stack *sta){ return sta->top == 0;}bool Init(Stack *sta){sta->base = (ElemType *)malloc(sizeof(ElemType)*STACK_SIZE);assert(sta->base != NULL);sta->top = 0; sta->capacity = STACK_SIZE;return true;}bool push_stack(Stack *sta,ElemType x){ sta->base[sta->top++] = x; return true;}bool pop_stack(Stack *sta){ if(IsEmpty(sta)) { cout<<"the stack is empty"<<endl; return false; } cout<<sta->base[sta->top-1]; sta->top–; return true;}void show_stack(Stack *sta){ int i = 0; cout<<"top:"; while(i < sta->top) {cout<<sta->base[i]<<"-";i++; } cout<<">base"<<endl;}bool n_chage(Stack *sta,ElemType n) //n为你要转化的进制数{sta->top = 0;//清空原来的栈 int obj; int a; cout<<"请输入需要转化的数字:"; cin>>obj; while(obj != 0) { a = obj%n;push_stack(sta,a); obj = obj /n; } while(sta->top != 0) {pop_stack(sta); } return true;}bool pipei(char a,char b){ if( a== '(' && b == ')') return true; if(a == '[' && b ==']')return true; if(a == '{' && b=='}')return true; return false;}bool string_pipei(Stack *sta){ sta->top = 0; int count; char str[100]; char *p =str; cout<<"请输入要匹配的字符串"; cin>>str; while(*p != '\0') {if(*p =='[') { push_stack(sta,*p);count =1; } if(*p =='(') { push_stack(sta,*p);count =1; } if(*p =='{') { push_stack(sta,*p);count =1; } p++;if(pipei(sta->base[sta->top-1],*p)) pop_stack(sta);} if(sta->top == 0 && count == 1)cout<<" 匹配"<<endl; elsecout<<"不匹配"<<endl; return true;}#endif/////////////////////////main函数实现部分#include"seqstack.h"void main(){ Stack mystack; int select; int item; Init(&mystack); while(select) {cout<<"*[0] quit[1] pushstack *"<<endl;cout<<"*[2] popstack [3] show_stack *"<<endl;cout<<"*[4] n_chage[5] string_pipei*"<<endl;cout<<"请选择";cin>>select;switch(select){ case 1:cout<<"请输入要入栈的数以-1结束"<<endl;while(cin>>item,item != -1){push_stack(&mystack,item);}break; case 2:pop_stack(&mystack);cout<<endl;break; case 3:show_stack(&mystack);break; case 4:cout<<"请输入进制数(不超过10):";cin>>item;n_chage(&mystack,item);cout<<endl;break; case 5://若要使用此函数,请请看看数据类型string_pipei(&mystack);break; default:break;} } }

朋友,旭日正在升起,每一份付出,

栈的实现,进制数转换以及符号匹配

相关文章:

你感兴趣的文章:

标签云: