未实现动态分配。
1 #define STACK_INIT_SIZE 100 2 #define STACKINREMENT 10 3 #define OVERFLOW -1 4 #define OK 1 5 6 typedef struct{ 7 SElemType *base0; 8 SElemType *base1; 9 SElemType *top0; 10 SElemtype *top1; 11 int twstacksize; 12 }twstack; 13 14 Status initStack(twstack &tws) { 15 tws.base0 =(SElemtype *)malloc(STACK_INIT_SIZE * sizeof(SElemtype)); 16 if(!tws.base0 ) 17 exit(OVERFLOW); //存储分配失败 18 tws.top0 = tws.base0; 19 tws.base1 = tws.base0 + STACK_INIT_SIZE; 20 tws.top1 = tws.base1; 21 stacksize = STACK_INIT_SIZE; 22 return OK; 23 } 24 25 Status push(twstack &tws,int i,ELemtype e){ 26 if(tws.top0 == tws.top1 ) 27 return ERROE;//栈已满,不能插入 28 switch(i){ 29 case 0: 30 *tws.top0++ = e; 31 break; 32 case 1: 33 *tws.top1-- = e; 34 break; 35 default: 36 printf("illege input\n"); 37 break; 38 } 39 } 40 41 status pop(twstack &tws,int i,SElemtype &e){ 42 switch(i){ 43 case 0: 44 if(tws.base0 == tws.top0 )//若栈空,无法删除 45 printf("empty stack:0\n"); 46 break; 47 else 48 e = *tws.top0--; 49 break; 50 case 1: 51 if(tws.base1 == tws.top1)//若栈空,无法删除 52 printf("empty stack1\n"); 53 break; 54 else 55 e = *tws.top1++; 56 break; 57 default: 58 printf("illege input\n") ; 59 break; 60 } 61 }