数据结构 P46-47 算法实现 顺序栈的基本操作

xiaoxiao2021-02-28  14

#include <iostream> using namespace std; #define STACK_INIT_SIZE 100     //初始存储容量 #define  STACKINCERMENT 10   //存储空间增量 struct SqStack                    //顺序栈的定义 { int *base;                        //栈底指针 int *top;                          //栈顶指针 int stacksize;                   //当前最大容量 }; bool InitStack(SqStack &S)                     //构造一个空栈 { S.base=new int [STACK_INIT_SIZE];     //先给空栈分配一个初始空间 if(!S.base) return 0;                              //分配失败则返回0 S.top=S.base;                                      //栈顶指针初值指向栈底指针,代表空栈 S.stacksize=STACK_INIT_SIZE;             //赋予栈当前的最大容量值 return 1; } int GetTop(SqStack S,int &e)                         //若栈不空,则用e返回S的栈顶元素 { if(S.top==S.base)     return 0;          //如果栈为空,则返回0 e=*(S.top-1);                                   //如果栈不为空,则用e返回栈顶元素 //cout<<e<<endl;     return e; } bool Push(SqStack &S,int e)                  //插入元素e为新的栈顶元素 { if(S.top-S.base>S.stacksize)           //如果栈满,则给栈追加存储空间 { S.base=new int[STACKINCERMENT]; S.top=S.base+S.stacksize; S.stacksize+=STACKINCERMENT; } if(!S.base) return 0;                        //如果分配失败,则返回0 *S.top=e;                                      //把e的值赋给栈顶指针  ,可合并为 *S.top++=e;    (++运算级高于*) ++S.top;                                      //栈顶指针地址加一     return 1; } bool Pop(SqStack &S)                      //若栈不空,则删除S的栈顶元素 {                                      if(S.top==S.base)                         //若栈为空,返回0 return 0; *(--S.top)=NULL;                                //把栈顶指针指向的值赋给e return 1; } int main() { int e=3,x;                                       SqStack s;                                  //定义一个栈s InitStack(s);                                //初始化栈 Push(s,e);                                    //插入元素e为新的栈顶元素 GetTop(s,e);                                //用e返回栈顶元素 cout<<e<<endl; Pop(s);                                        //删除栈顶元素     GetTop(s,x); cout<<x; while(1){} delete [] s.base; return 0; }
转载请注明原文地址: https://www.6miu.com/read-1650235.html

最新回复(0)