源代码: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175# include<iostream># define MAXSIZE 10using namespace std;typedef int SElemType;//栈中元素类型//1.共享栈的结构定义typedef struct StackNode{ SElemType data[MAXSIZE]; int top1;//Stack1的栈顶指针 int top2;//Stack2的栈顶指针}DoubleStack;//用 DoubleStack 来代替 struct StackNode//共享栈的初始化操作void InitStack(DoubleStack* s){ s->top1 = -1; // 初始化一号栈的栈顶指针 s->top2 = MAXSIZE; // 初始化二号栈的栈顶指针}//2.共享栈的入栈操作//ps:要传入栈的结构体指针,即&s,以及要入栈的元素,要入栈的栈号bool Push(DoubleStack * s, SElemType e,int stacknumber){//[1]判断两个栈是否栈满 if (s->top1 + 1 == s->top2){ printf("栈满!\n"); return false; }//[2]若给一号栈入栈,进行一号栈的入栈操作 if(stacknumber == 1){ //<1>栈顶指针后移 s->top1++; //<2>为当前栈顶空间赋值 s->data[s->top1] = e; //两步可以合并为一步: //s->data[++s->top1];先移动栈顶指针,再赋值 return true;}//[3]若给二号栈入栈,进行二号栈的入栈操作else if (stacknumber == 2){ //<1>栈顶指针前移 s->top2--; //<2>为当前栈顶空间赋值 s->data[s->top2] = e; //两步可以合并为一步: //s->data[--s->top2];先移动栈顶指针,再赋值 return true;}else{ return false;//错误的栈编号!}}//3.共享栈的出栈Pop操作bool Pop(DoubleStack* s,SElemType* e,int stacknumber){ if(stacknumber == 1) { //a.如果栈为空,则返回false if (s->top1 == -1){ printf("栈空!\n"); return false; } //b.将当前栈顶原色赋值给e *e = s->data[s->top1]; s->top1--; //这一步也可以合并为一步: //*e = s->data[s->top1--];} else if(stacknumber == 2){//a.如果栈为空,则返回false if (s->top2 == MAXSIZE){ printf("栈空!\n"); return false; }//b.将当前栈顶原色赋值给e *e = s->data[s->top2]; s->top2++; //这一步也可以合并为一步: //*e = s->data[s->top2++];} else{ return false;//输入了错误的栈编号 } return true;}int main(){ DoubleStack s1; // 声明一个共享栈 InitStack(&s1); // 初始化共享栈 cout<<"请输入是s1的数据"<<endl; for(int i = 0;i<5;i++){ SElemType a=0; cin>>a; Push(&s1, a, 1);} cout<<"请输入是s2的数据"<<endl; for(int i = 0;i<6;i++){ SElemType b=0; cin>>b; Push(&s1, b, 2); } SElemType e; Pop(&s1, &e, 1); printf("栈1出栈元素:%d\n", e); Pop(&s1, &e, 2); printf("栈2出栈元素:%d\n", e); return 0;} 待完善