数据结构之---C语言实现共享栈

来源:互联网 发布:linux fsck修复危险性 编辑:程序博客网 时间:2024/04/25 16:20

所谓共享栈是两个栈在一个顺序的存储空间中。两个栈的栈底分别是存储空间的首尾地址。

如图我们可以将两个栈构造成一个:

如图:


从这里也就可以分析出来,栈1为空时,就是top1等于-1时;而当top2等于n时,即是栈2为空时,那么什么时候栈满呢?

     想想极端的情况,若栈2是空栈,栈1的top1等于n-1时,就是栈1满了。反之,当栈1为空栈时,top2等于0时,为栈2满。但更多的情况,其实就是刚才说的,两个栈见面之时,也就是两个指针之间相差1时,即top1+1==top2为栈满

具体的实现代码如下:


//共享栈//杨鑫#include <stdio.h>#include <stdlib.h>#define MaxSize 60 #define OK      1      #define ERROR   0      #define TRUE    1      #define FALSE   0    typedef int ElemType;  typedef int Status;  typedef struct {      ElemType    data[MaxSize];      int         top1;                        int         top2;}Stack,  *pStack;  Status init_Stack(pStack S){S->top1 = -1;S->top2 = MaxSize;return OK; }Status push_Stack(pStack S, ElemType e, int stackNumber){if (S->top1+1 == S->top2)return ERROR;switch(stackNumber){case 1:S->data[++S->top1] = e;break;case 2:S->data[--S->top2] = e;break;}return OK;}Status pop_Stack(pStack S, ElemType *e, int stackNumber){if (1 == stackNumber){if (-1 == S->top1)return ERROR;*e = S->data[S->top1--];}else if (2 == stackNumber){if (MaxSize == S->top2)return ERROR;*e = S->data[S->top2++];}return OK;}Status dis_pStack(pStack S, int stackNumber){int i;if (1 == stackNumber){if (-1 == S->top1)return ERROR;printf("栈1中的元素为:\n");for (i=0; i<=S->top1; ++i)printf("%d ", S->data[i]);printf("\n==================================\n");}else if (2 == stackNumber){if (MaxSize == S->top2)return ERROR;printf("栈2中的元素为:\n");for (i=MaxSize-1; i>=S->top2; --i)printf("%d ", S->data[i]);printf("\n==================================\n");}}int main(){printf("======共享栈===========\n\n");Stack S;ElemType e;init_Stack(&S);push_Stack(&S, 1, 1);push_Stack(&S, 2, 1);push_Stack(&S, 3, 1);push_Stack(&S, 4, 1);push_Stack(&S, 5, 1);push_Stack(&S, 6, 1);pop_Stack(&S, &e, 1);push_Stack(&S, 10, 2);push_Stack(&S, 9, 2);push_Stack(&S, 8, 2);push_Stack(&S, 7, 2);dis_pStack(&S, 1);dis_pStack(&S, 2);return 0;}

图片:


0 0
原创粉丝点击