两栈共享空间
2017-07-18 11:11
141 查看
(top1的初始值为0,top2的初始值为MAXSIZE-1;)
#include <stdio.h> #include <stdlib.h> #define MAXSIZE 20 typedef struct Node { int data[MAXSIZE]; int top1; int top2; }DoubleSQ; //typedef struct Node *DoubleSQ; //压栈 int pushStack(DoubleSQ *s,int num,int flag) { if(s->top1+1!=s->top2) { if(flag==1) { s->data[s->top1]=num; s->top1++; } else { s->data[s->top2]=num; s->top2--; } return 1; } else return 0; } //出栈 int popStack(DoubleSQ *s,int flag) { if(flag==1) { if(s->top1==0) return -1; return s->data[--s->top1]; } else { if(s->top1==0&&s->top2==MAXSIZE-1) return -1; return s->data[++s->top2]; } } void putStack(DoubleSQ *s) { printf("stack1:\n"); int i; for(i=0;i<s->top1;i++) printf("%d ",s->data[i]); printf("\nstack2:\n"); for(i=MAXSIZE-1;i>s->top2;i--) printf("%d ",s->data[i]); } int StackEmpty(DoubleSQ * s) { if(0==s->top1&&MAXSIZE-1==s->top2) return 1; else return 0; } int getTop(DoubleSQ *s,int flag) { if(flag==1&&s->top1!=0) { return s->data[s->top1-1]; } else if(flag==2&&s->top2!=0) { return s->data[s->top2+1]; } else return -1; } int StackLength(DoubleSQ *s,int flag) { return (flag==1)?s->top1:s->top2; } int main() { DoubleSQ * Stack; Stack = (DoubleSQ *)malloc(sizeof(struct Node)); Stack->top1=0;Stack->top2=MAXSIZE-1; pushStack(Stack,7,1); pushStack(Stack,8,1); putStack(Stack); pushStack(Stack,9,2); pushStack(Stack,10,2); putStack(Stack); printf("\nStackLength: %d \n",StackLength(Stack,1)); printf("\ngetTop: %d \n",getTop(Stack,1)); printf("\ngetTop: %d \n",getTop(Stack,2)); printf("\npopStack: %d \n",popStack(Stack,1)); printf("\npopStack: %d \n",popStack(Stack,1)); printf("\npopStack: %d \n",popStack(Stack,1)); printf("\npopStack: %d \n",popStack(Stack,2)); return 0; }