本文共 2207 字,大约阅读时间需要 7 分钟。
存档
1 #include "iostream.h" 2 #include3 #define max 20 4 typedef char elemtype; 5 #include "stack.h" 6 void main() 7 { 8 stack s; 9 char x;10 cout<<"(1)初始化栈s\n";11 initstack(s);12 cout<<"(2)栈为"<<(stackempty(s)?"空":"非空")< >x;15 while(x!='#')16 {17 push(s,x);18 cin>>x;19 }20 cout<<"(4)栈为"<<(stackempty(s)?"空":"非空")<
1 struct stack 2 { 3 elemtype *base;//存栈元素 4 elemtype *top;//栈顶指定器 5 int stacksize;//栈的最大容量 6 }; 7 void initstack(stack &s) 8 { 9 //构造一个空栈s 10 s.base=new elemtype[max];//malloc()分配存储空间 11 if(!s.base) 12 exit(-2);//#define OVERFLOW -2 13 s.top=s.base;//空栈 14 s.stacksize=max;//栈的存储容量 15 } 16 void clearstack(stack &s) 17 { 18 //清除栈s,使成为空栈 19 s.top=s.base;//空栈栈顶指针和栈底指针相等 20 } 21 int stackempty(stack s) 22 { 23 //若栈s为空栈返回1,否则返回0 24 if(s.top==s.base) 25 return 1;//空栈返回1,非空返回0 26 else 27 return 0; 28 } 29 int stacklength(stack s) 30 { 31 //返回栈的长度 32 return s.top-s.base; 33 } 34 void push(stack &s,elemtype e) 35 { 36 //元素e进栈 37 if(!s.base)//栈不存在的处理 38 { 39 cout<<"栈不存在\n"; 40 return; 41 } 42 if(s.top-s.base>s.stacksize)//栈满的处理 43 { 44 cout<<"栈已满!\n"; 45 return; 46 } 47 *s.top=e;//元素e存进栈顶的位置 48 s.top++;//栈顶指针指向栈顶元素的下一个位置 49 } 50 elemtype pop(stack &s) 51 { 52 //栈s的栈顶元素出栈并返回 53 if(s.base==s.top) 54 { 55 cout<<"栈空,不能出栈\n"; 56 exit(-2); 57 } 58 else 59 { 60 s.top--;//栈顶指针减1,下次进栈,会覆盖当前位置的值,相当于删除 61 return *s.top;//返回栈顶元素的值 62 } 63 } 64 int pop1(stack &s,elemtype &e) 65 { 66 //栈s的栈顶元素出栈并返回 67 if(s.base==s.top) 68 { 69 cout<<"栈空,不能出栈\n"; 70 return 0; 71 } 72 else 73 { 74 s.top--;//栈顶指针减1,下次进栈,会覆盖当前位置的值,相当于删除 75 e=*s.top; 76 return 1;//返回栈顶元素的值 77 } 78 } 79 elemtype gettop(stack s) 80 { 81 //取栈s的当前栈顶元素并返回 82 if(s.top==s.base) 83 { 84 cout<<"栈空,获取栈顶元素失败"<=0;i--)//总共s.top-s.base个元素,下标范围就是[0...(s.top-s.base-1)]107 cout< <<" ";108 cout<
运行结果如下:
转载地址:http://ecooa.baihongyu.com/