目录
1.顺序栈
顺序栈的运行结果及截图
2.链栈
链栈的运行结果及截图
3.共享栈
共享栈的运行结果及截图

目录
1.顺序栈
顺序栈的运行结果及截图
2.链栈
链栈的运行结果及截图
3.共享栈
共享栈的运行结果及截图
#includeusing namespace std; #define MaxSize 128 typedef int ElemType; typedef struct SqStack{//定义顺序栈的栈点结构体 ElemType data[MaxSize];//存放栈中元素 int top; //栈顶指针 }SqStack; //顺序栈 bool InitStack(SqStack& S) {//初始化栈 S.top = -1;//初始化栈顶指针 return true; } bool StackEmpty(SqStack S) {//是否为空栈 if (S.top == -1) {//栈顶指针指向栈尾指针,空栈! cout << "该栈是个空栈!" << endl; return true; }//栈空 return false; } bool Push(SqStack& S) {//入栈操作 if (S.top == MaxSize - 1) {//判断是否栈满 cout << "栈已满" << endl; return false; } cin >> S.data[++S.top];//若栈未满向其中填入数据,栈顶指针先向后移动,在填入数据 return true; } bool Pop(SqStack& S) {//出栈 if (S.top == -1) {//判断是否是空栈 cout << "该栈是个空栈!" << endl; return false; } cout << " " << S.data[S.top--];//若不是空栈,先输出数据在移动栈顶指针 return true; } int main() { SqStack S; InitStack(S); int x; cout << "请输入你要入栈的个数"; cin >> x; while (x) { Push(S); x--; } int y; cout << "请输入你要出栈的个数"; cin >> y; while (y) { Pop(S); y--; } }
#includetypedef struct StackNode { ElemType data; //数据域 struct StackNode* next; //指针域 }StackNode; typedef StackNode* LinkStacklink; //链栈指针 void InitStacklink(LinkStacklink* s)//初始化 { *s = NULL; } //入栈 void Pushlink(LinkStacklink* s) { //为栈结点分配空间 StackNode* t = new StackNode; //将数据存入这个栈结点 cin>>t->data; if (*s == NULL) //如果链栈里面的结点为空 { *s = t; //将链栈的指针指向这个结点 t->next = NULL; } else //如果栈里面已经有结点,直接进行头插 { t->next = *s;//将新结点连接上之前的结点 *s = t;//将栈指针指向最新的栈结点 } } //出栈 void Poplink(LinkStacklink* s) { StackNode* p = *s; //指向新的栈顶 *s = p->next; cout<<" " << p->data; //删除结点 free(p); p = NULL; } int main() { LinkStacklink st; int x; cout << "请输入你要入栈的次数:"; cin >> x; while (x) { Pushlink(&st); x--; } int y; cout << "请输入你要出栈的次数:"; cin >> y; while (y) { Poplink(&st); y--; } }
#includetypedef struct { ElemType data[MaxSize]; int top0; int top1; }ShareStack; void InitShareStack(ShareStack* shstack) { shstack->top0 = -1; //初始化0号栈的栈顶指针为-1,此时1号栈为空 shstack->top1 = MaxSize; //同理栈顶指针为MaxSize时,1号栈为空 } int EmptySharaStack(ShareStack shstack)//空栈判断 { if (shstack.top0 == -1 && shstack.top1 == MaxSize) { return -2; //两个栈都空时,返回--2 } else if (shstack.top0 == -1) { return -1;//0号栈为空,1号栈非空时,返回-1 } else if (shstack.top1 == MaxSize) { return 0; //1号栈为空,0号栈非空时,返回0 } return 1; //两个栈都非空时,返回1 } //0号栈入栈 bool PushTop0(ShareStack* shstack) { if ((shstack->top1 - shstack->top0) == 1) //栈满,报错 { return false; } shstack->top0++; //0号栈顶指针先加1 cin>>shstack->data[shstack->top0]; //元素入栈 return true; } //1号栈入栈 bool PushTop1(ShareStack* shstack) { if ((shstack->top1 - shstack->top0) == 1) //栈满,报错 { return false; } shstack->top1--; //1号栈顶指针先减一 cin>>shstack->data[shstack->top1]; //元素入栈 return true; } //0号栈出栈 bool PopTop0(ShareStack* shstack) { if (shstack->top0 == -1) //1号栈空,报错 { return false; } cout<<" "<< shstack->data[shstack->top0]; //栈顶元素先出栈 shstack->top0--; //栈顶指针再减1 return true; } //1号栈出栈 bool PopTop1(ShareStack* shstack) { if (shstack->top1 == MaxSize) //1号栈空,报错 { return false; } cout<<" "< data[shstack->top1]; //栈顶元素先出栈 shstack->top1++; //栈顶指针再加1 return true; } int main(){ ShareStack L; InitShareStack(& L); //0号栈入栈 cout << "请输入要输入0号栈要入栈的个数:"; int x; cin >> x; cout << "请分别输入要入0号栈的值:"; while (x) { PushTop0(&L); x--; } cout << "请输入要输入0号栈要出栈的个数:"; int y; cin >> y; while (y) { PopTop0(&L); y--; } //1号栈入栈 cout << endl; cout << "请输入要输入1号栈要入栈的个数:"; int p; cin >> p; cout << "请分别输入要入1号栈的值:"; while (p) { PushTop1(&L); p--; } cout << "请输入要输入1号栈要出栈的个数:"; int q; cin >> q; while (q) { PopTop1(&L); q--; } }