共享栈的实现:如图,top1从0开始向右入栈,top2从maxsize开始向左入栈,这样就可以满足在一个数组中创建两个栈,同时也避免了空间的浪费
基本操作我们分为:初始化栈、入栈、出栈、取栈顶元素,具体实现代码如下
1 #include<stdio.h>
2 #define SharedStackMax 100
3 typedef char SharedStackType;
4 typedef struct SharedStack{
5 SharedStackType data[SharedStackMax];
6 size_t top1;
7 size_t top2;
8 }SharedStack;
9
10 void SharedStackInit(SharedStack*stack)
11 {
12 if(stack==NULL)
13 {
14 return;
15 }
16 stack->top1=0;
17 stack->top2=SharedStackMax;
18 }
19 void SharedStackPush1(SharedStack*stack,SharedStackType value)
20 {
21 if(stack==NULL)
22 {
23 return;
24 }
25 if(stack->top1==stack->top2)
26 {
27 return;
28 }
29 stack->data[stack->top1++]=value;
30 return;
31 }
32 void SharedStackPush2(SharedStack*stack,SharedStackType value)
33 {
34 if(stack==NULL)
35 {
36 return;
37 }
38 if(stack->top2==stack->top1)
39 {
40 return;
41 }
42 stack->data[--stack->top2]=value;
43 }
44 int SharedStackTop1(SharedStack*stack,SharedStackType*value)
45 {
46 if(stack==NULL||value==NULL)
47 {
48 return 0;
49 }
50 if(stack->top1==0)
51 {
52 return 0;
53 }
54 *value=stack->data[top1-1];
55 return 1;
56
57 }
58 int SharedStackTop2(SharedStack*stack,SharedStackType*value)
59 {
60 if(stack==NULL||value==NULL)
61 {
62 return 0;
63 }
64 if(stack->top2==SharedStackMax)
65 {
66 return 0;
67 }
68 *value=stack->data[stack->top2];
69 return 1;
70 }
71 void SharedStackPop1(SharedStack*stack)
72 {
73 if(stack==NULL)
74 {
75 return;
76 }
77 if(stack->top1==0)
78 {
79 return;
80 }
81 stack->top1--;
82 }
83 void SharedStackPop2(SharedStack*stack)
84 {
85 if(stack==NULL)
86 {
87 return;
88 }
89 if(stack->top2==SharedStackMax)
90 {
91 return;
92 }
93 stack->top2++;
94 }