习题3.15 双向栈

未实现动态分配。

 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                 break54             else
55                 e = *tws.top1++;
56                 break;
57         default:
58             printf("illege input\n") ;
59             break;
60     }    
61 }

猜你喜欢

转载自www.cnblogs.com/strolling-leisurely/p/10716309.html