共享栈的基本操作

xiaoxiao2021-02-28  59

共享栈的实现:如图,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 }
转载请注明原文地址: https://www.6miu.com/read-2623595.html

最新回复(0)