c++实现栈建立,插入,删除

来源:互联网 发布:c语言字符串指针传递 编辑:程序博客网 时间:2024/06/08 14:03
# include<iostream>using namespace std;#define STACK_INIT_SIZE 10#define STACKINCREMENT 5typedef int SElemType;//定义栈结构typedef struct{SElemType *base;SElemType *top;int stacksize;}SqStack;//建立栈void InitStack(SqStack &S){S.base = (SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));if (!S.base){cout << endl << "Allocate space failure !" << endl;}S.top = S.base;S.stacksize = STACK_INIT_SIZE;*S.top++ = 5;//先将元素赋给*S.stop, 然后指针S.top++*S.top++ = 8;             *S.top++ = 12;*S.top++ = 18;*S.top++ = 30;*S.top++ = 37;*S.top++ = 45;*S.top++ = 78;}//返回栈顶元素void GetTop(SqStack &S){SElemType e;if (S.top == S.base) cout << "栈为空!" << endl;e = *(S.top - 1);cout << "Top元素为:" << e << endl;}//插入元素evoid Push(SqStack &S, SElemType e){if (S.top - S.base >= S.stacksize){S.base = (SElemType *)realloc(S.base, (S.stacksize + STACKINCREMENT)*sizeof(SElemType));if (!S.base)cout << "追加存储空间失败!" << endl;S.top = S.base + S.stacksize;//重新初始化S.top的位置S.stacksize += STACKINCREMENT;//栈长度加上增加的长度}*S.top++ = e;cout << endl << "插入成功!" << endl;}//打印栈void PrintStack(SqStack &S){SElemType *p;cout << endl << endl << "栈元素";cout << endl << "------";cout << endl << "The old SqStack is (base to top) : " << endl;for (p = S.base; p != S.top; p++)//output the old SqStack{cout << *p << " 地址为:" << p << endl;}cout << S.base << endl;}//删除顶元素void Pop(SqStack &S){if (S.top == S.base) cout << "栈为空,删除失败!" << endl;--S.top;}void main(){SqStack S;SElemType e;e = 999;cout << endl << endl << "InitStack.cpp";cout << endl << "==============" << endl;//建栈,并初始化InitStack(S);//返回top元素GetTop(S);//打印栈元素PrintStack(S);//向栈插入元素ePush(S, e);PrintStack(S);//删除栈顶元素Pop(S);PrintStack(S);system("pause");//防止运行结果一闪而过}

阅读全文
0 0
原创粉丝点击