在一个数组中实现两个堆栈
来源:互联网 发布:eclipse怎么写java程序 编辑:程序博客网 时间:2024/04/30 03:39
本题要求在一个数组中实现两个堆栈。
函数接口定义:
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)]; }}
0 0
- 在一个数组中实现两个堆栈
- 在一个数组中实现两个堆栈
- 4-7 在一个数组中实现两个堆栈
- 一个数组实现两个堆栈
- 数据结构与算法——在一个数组中实现两个堆栈(C语言)
- 4-7 在一个数组中实现两个堆栈 (20分)
- 4-7 在一个数组中实现两个堆栈 (20分)
- 4-7 在一个数组中实现两个堆栈 (20分)
- 4-7 在一个数组中实现两个堆栈 (20分)
- 4-7 在一个数组中实现两个堆栈 (20分) PTA
- 6-3 在一个数组中实现两个堆栈(20 分)-pta_same_无聊的水体
- PTA数据结构与算法题目集(中文)4-7 在一个数组中实现两个堆栈 (20分)
- 两个数组实现堆栈
- 怎么用两个堆栈实现一个队列?
- 每日一题16:在一个数组中实现两个栈
- 两个堆栈实现一个队列 , 利用两个队列实现一个堆栈(Java)
- 用一个数组实现两个堆栈,最大地使用数组的空间,只要有空间就能入栈成功
- 在一个数组中找到最大的两个数
- ssm后台管理系统框架(Spring mvc + mybatis + mysql + easyui )
- ajax跨域
- 关于%d%*c 与getchar()吃掉换行符问题
- CodeForces
- 在阿里云上部署自己的网站
- 在一个数组中实现两个堆栈
- shell中的for循环用法
- 方立勋_30天掌握JavaWeb_Servlet Filter(过滤器)未完
- 第四章 JAVA流程控制语句
- 常用的Java注释标签
- hiho 1143 骨牌覆盖问题 java
- LeetCode 329. Longest Increasing Path in a Matrix 在二维数组中寻找最长递增序列
- 轻量级Java EE企业应用实战(Spring目录第七章)
- 使用python获取系统网络信息