// _DataStructure_C_Impl:共享栈 #include<stdio.h> #include<stdlib.h> #define StackSize 100 typedef char DataType; //两个共享栈的数据结构类型定义 typedef struct { DataType stack[StackSize]; int top[2]; }SSeqStack; //共享栈的初始化操作 void InitStack(SSeqStack *S){ S->top[0]=0; S->top[1]=StackSize-1; } //共享栈进栈操作。进栈成功返回1,否则返回0 int PushStack(SSeqStack *S,DataType e,int flag){ if(S->top[0]==S->top[1]) //在进栈操作之前,判断共享栈是否为空 return 0; switch(flag){ case 0: //当flag为0,表示元素要进左端的栈 S->stack[S->top[0]]=e; //元素进栈 S->top[0]++; //修改栈顶指针 break; case 1: //当flag为1,表示元素要进右端的栈 S->stack[S->top[1]]=e; //元素进栈 S->top[1]--; //修改栈顶指针 break; default: return 0; } return 1; } //出栈操作 int PopStack(SSeqStack *S,DataType *e,int flag){ switch(flag){ //在出栈操作之前,判断是哪个栈要进行出栈操作 case 0: if(S->top[0]==0) //左端的栈为空,则返回0,表示出栈操作失败 return 0; S->top[0]--; //修改栈顶指针 *e=S->stack[S->top[0]]; //将出栈的元素赋值给e break; case 1: if(S->top[1]==StackSize-1) ////右端的栈为空,则返回0,表示出栈操作失败 return 0; S->top[1]++; //修改栈顶指针 *e=S->stack[S->top[1]]; //将出栈的元素赋值给e break; default: return 0; } return 1; } //取栈顶元素。将栈顶元素值返回给e,并返回1表示成功;否则返回0表示失败。 int GetTop(SSeqStack S,DataType *e,int flag){ switch(flag){ case 0: if(S.top[0]==0) return 0; *e=S.stack[S.top[0]-1]; break; case 1: if(S.top[1]==StackSize-1) return 0; *e=S.stack[S.top[1]+1]; break; default: return 0; } return 1; } int StackEmpty(SSeqStack S,int flag){ switch(flag){ case 0: if(S.top[0]==0) return 1; break; case 1: if(S.top[1]==StackSize-1) return 1; break; default: return 0; } return 0; } void main(){ SSeqStack S1,S2; /*定义一个栈*/ int i; DataType a[]={'a','b','c','d','e'}; DataType b[]={'x','y','z','r'}; DataType e1,e2; InitStack(&S1); /*初始化栈*/ InitStack(&S2); for(i=0;i<sizeof(a)/sizeof(a[0]);i++) /*将数组a中元素依次进栈*/ { if(PushStack(&S1,a[i],0)==0) { printf("栈已满,不能进栈!"); return; } } for(i=0;i<sizeof(b)/sizeof(b[0]);i++) /*将数组b中元素依次进栈*/ { if(PushStack(&S2,b[i],1)==0) { printf("栈已满,不能进栈!"); return; } } if(GetTop(S1,&e1,0)==0) { printf("栈已空"); return; } if(GetTop(S2,&e2,1)==0) { printf("栈已空"); return; } printf("栈S1的栈顶元素是:%c,栈S2的栈顶元素是:%c\n",e1,e2); printf("S1出栈的元素次序是:"); i=0; while(!StackEmpty(S1,0)) { PopStack(&S1,&e1,0); printf("%4c",e1); } printf("\n"); printf("S2出栈的元素次序是:"); while(!StackEmpty(S2,1)) { PopStack(&S2,&e2,1); printf("%4c",e2); } printf("\n"); system("pause"); }
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-07 06:33:19