//假设有二个栈共同使用一块顺序存储的空间,为简单起见可设为共同使用数组 int //buffer[200]。它们的栈底分别设在数组的两端,而栈顶指针在进行插入操作时,向 //中间方向移动。请给出进出栈的程序. #include #include #include"test3.h" #include #define Maxsize 200 int main() { int i,flat=1,len1,len2,n; char str[Maxsize],e; SqStack *A,*B; A=CreateSqStack();//创建栈A B=CreateSqStack();//创建栈B InitSqStackA(A);//初始化栈A InitSqStackB(B);//初始化栈B printf("对栈A输入一组字符:\n"); gets(str); len1=strlen(str);//len1 用于存放栈A的数据元素的个数 for(i=0;itop=0; return S; } unsigned char InitSqStackA(SqStack *S)//初始化栈A { SqStack *p; p=S; if(!S) return ERROR; S->top=0; return OK; } unsigned char InitSqStackB(SqStack *S)//初始化栈B { SqStack *p; p=S; if(!S) return NULL; p->top=200; return OK; } unsigned char PushSqStackA(SqStack *S,elemtype e)//将数据元素插入栈A中(进栈) { SqStack *p; p=S; if(!S) return ERROR; p->data[p->top]=e; p->top++; return OK; } unsigned char PushSqStackB(SqStack *S,elemtype e)//将数据元素插入栈B中(进栈) { SqStack *p; p=S; if(!S) return ERROR; p->data[p->top-1]=e; p->top--; return OK; } unsigned char PopSqStackA(SqStack *S,elemtype *e)//出栈A { SqStack *p; p=S; if(!S) return ERROR; if(p->top == 0) { printf("栈A已空!\n"); return ERROR; } *e=p->data[p->top-1]; p->top--; return OK; } unsigned char PopSqStackB(SqStack *S,elemtype *e)//出栈B { SqStack *p; p=S; if(!S) return ERROR; if(p->top == Maxsize) { printf("栈B已空!\n"); return ERROR; } *e=p->data[p->top]; p->top++; return OK; } unsigned char Judge(SqStack *A,SqStack *B)//判断栈A与栈B是否已将空间占满 { SqStack *p,*q; p=A; q=B; if(!A || !B) return ERROR; if(p->top < q->top ) return OK; else return ERROR; } /////////////////////////////////////// /* test.h */ /* filename:test.h */ /* description:test.h的头文件 */ /* designer:zhu jian */ /* data:12-10-26 */ /////////////////////////////////////// #ifndef _DATA_STRUCTURE_TEST_H_ #define _DATA_STRUCTURE_TEST_H_ #ifndef ERROR #define ERROR 0 #endif #ifndef OK #define OK 1 #endif #ifndef NULL #define NULL 0 #endif #define Maxsize 200//定义最大数据元素量是200 typedef char elemtype;//定义用elemtype取代char typedef struct{//定义栈的结构体 elemtype data[Maxsize]; int top; }SqStack; SqStack *CreateSqStack(void);//定义一个栈的指针 unsigned char InitSqStackA(SqStack *S);//初始化栈A unsigned char InitSqStackB(SqStack *S);//初始化栈B unsigned char PushSqStackA(SqStack *S,elemtype e);//将数据元素插入栈A中(进栈) unsigned char PushSqStackB(SqStack *S,elemtype e);//将数据元素插入栈B中(进栈) unsigned char PopSqStackA(SqStack *S,elemtype *e);//出栈A unsigned char PopSqStackB(SqStack *S,elemtype *e);//出栈B unsigned char Judge(SqStack *A,SqStack *B);//判断栈A与栈B是否已将空间占满 #endif