在一个数组中实现两个堆栈
2017-04-13 00:22
381 查看
本题要求在一个数组中实现两个堆栈。
函数接口定义:
其中
注意:如果堆栈已满,
这个题其实很坑啊,我自己写的方式也是可以的,但是这个题的
标准实现:
我的实现:
函数接口定义:
Stack CreateStack( int MaxSize ); bool Push( Stack S, ElementType X, int Tag ); ElementType Pop( Stack S, int Tag );
其中
Tag是堆栈编号,取1或2;
MaxSize堆栈数组的规模;
Stack结构定义如下:
typedef int Position; struct SNode { ElementType *Data; Position Top1, Top2; int MaxSize; }; typedef struct SNode *Stack;
注意:如果堆栈已满,
Push函数必须输出“Stack Full”并且返回false;如果某堆栈是空的,则
Pop函数必须输出“Stack Tag Empty”(其中Tag是该堆栈的编号),并且返回ERROR。
这个题其实很坑啊,我自己写的方式也是可以的,但是这个题的
PrintStack写法和我的不一样,所以导致我的一直超时。
标准实现:
Stack CreateStack( int MaxSize ) { Stack ret = (Stack)malloc(sizeof(struct SNode)); ret->Data = (ElementType *)malloc(sizeof(ElementType) * MaxSize); ret->Top1 = -1; ret->Top2 = MaxSize; ret->MaxSize = MaxSize; return ret; } bool Push( Stack S, ElementType X, int Tag ) { if (S->Top1 + 1 == S->Top2) { puts("Stack Full"); return false; } if (Tag == 1) S->Data[++S->Top1] = X; else S->Data[--S->Top2] = X; return true; } ElementType Pop( Stack S, int Tag ) { if (Tag == 1) { if (S->Top1 == -1) { printf("Stack %d Empty\n", Tag); return ERROR; } return S->Data[S->Top1--]; } else { if (S->Top2 == S->MaxSize) { printf("Stack %d Empty\n", Tag); return ERROR; } return S->Data[S->Top2++]; } }
我的实现:
Stack CreateStack( int MaxSize ) { Stack ret = (Stack)malloc(sizeof(struct SNode)); ret->Data = (ElementType *)malloc(sizeof(ElementType) * MaxSize); ret->Top1 = 0; ret->Top2 = 0; ret->MaxSize = MaxSize; return ret; } bool Push( Stack S, ElementType X, int Tag ) { if (S->Top1 + S->Top2 == S->MaxSize) { puts("Stack Full"); return false; } if (Tag == 1) S->Data[S->Top1++] = X; else S->Data[S->MaxSize - 1 - S->Top2++] = X; return true; } ElementType Pop( Stack S, int Tag ) { if (Tag == 1) { if (S->Top1 == 0) { printf("Stack %d Empty\n", Tag); return ERROR; } return S->Data[--S->Top1]; } else { if (S->Top2 == 0) { printf("Stack %d Empty\n", Tag); return ERROR; } return S->Data[S->MaxSize - 1 - (--S->Top2)]; } }
相关文章推荐
- 6-3 在一个数组中实现两个堆栈(20 分)-pta_same_无聊的水体
- 4-7 在一个数组中实现两个堆栈 (20分)
- 4-7 在一个数组中实现两个堆栈 (20分) PTA
- 4-7 在一个数组中实现两个堆栈
- 数据结构与算法——在一个数组中实现两个堆栈(C语言)
- 一个数组实现两个堆栈的c++实现与测试
- 4-7 在一个数组中实现两个堆栈 (20分)
- 在一个数组中实现两个堆栈
- 4-7 在一个数组中实现两个堆栈 (20分)
- 4-7 在一个数组中实现两个堆栈 (20分)
- 数据结构:请用一个数组实现两个堆栈,要求最大地利用数组空间,使 数组只要有空间入栈操作就可以成功
- 用一个数组实现两个堆栈,最大地使用数组的空间,只要有空间就能入栈成功
- 一个数组实现两个堆栈
- 4-7 在一个数组中实现两个堆栈
- PTA数据结构与算法题目集(中文)4-7 在一个数组中实现两个堆栈 (20分)
- 【数据结构】一个数组实现两个栈
- 用一个数组实现两个栈
- 一个数组实现两个栈
- 一个数组实现两个栈
- 两个堆栈实现一个队列和一叠两个队列实现【算法导论课后题】