共享栈的基本操作

共享栈的实现:如图,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 }                                                        

猜你喜欢

转载自blog.csdn.net/enjoymyselflzz/article/details/80953309
今日推荐