6-3 在一个数组中实现两个堆栈(20 分)-pta_same_无聊的水体
来源:互联网 发布:网络直播的特点 编辑:程序博客网 时间:2024/04/30 04:28
6-3 在一个数组中实现两个堆栈(20 分)
本题要求在一个数组中实现两个堆栈。
函数接口定义:
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。
裁判测试程序样例:
#include <stdio.h>#include <stdlib.h>#define ERROR 1e8typedef int ElementType;typedef enum { push, pop, end } Operation;typedef enum { false, true } bool;typedef int Position;struct SNode { ElementType *Data; Position Top1, Top2; int MaxSize;};typedef struct SNode *Stack;Stack CreateStack( int MaxSize );bool Push( Stack S, ElementType X, int Tag );ElementType Pop( Stack S, int Tag );Operation GetOp(); /* details omitted */void PrintStack( Stack S, int Tag ); /* details omitted */int main(){ int N, Tag, X; Stack S; int done = 0; scanf("%d", &N); S = CreateStack(N); while ( !done ) { switch( GetOp() ) { case push: scanf("%d %d", &Tag, &X); if (!Push(S, X, Tag)) printf("Stack %d is Full!\n", Tag); break; case pop: scanf("%d", &Tag); X = Pop(S, Tag); if ( X==ERROR ) printf("Stack %d is Empty!\n", Tag); break; case end: PrintStack(S, 1); PrintStack(S, 2); done = 1; break; } } return 0;}
/* 你的代码将被嵌在这里 */
输入样例:
5
Push 1 1
Pop 2
Push 2 11
Push 1 2
Push 2 12
Pop 1
Push 2 13
Push 2 14
Push 1 3
Pop 2
End
输出样例:
Stack 2 Empty
Stack 2 is Empty!
Stack Full
Stack 1 is Full!
Pop from Stack 1: 1
Pop from Stack 2: 13 12 11
#include <stdio.h>#include <stdlib.h>#include<cstdio>#include<cstring>#define ERROR 1e8typedef int ElementType;typedef enum { push, pop, end } Operation;typedef int Position;struct SNode { ElementType *Data; Position Top1, Top2; int MaxSize;};typedef struct SNode *Stack;Stack CreateStack(int MaxSize){ Stack p = (Stack)malloc(sizeof(struct SNode)); p->Data = (int*)malloc(MaxSize * sizeof(int)); p->Top1 =- 1; p->Top2 = MaxSize; p->MaxSize = MaxSize; return p;}bool Push(Stack S, ElementType X, int Tag){ if (S->Top2 - S->Top1 == 1) { puts("Stack Full"); return 0; } if (Tag == 1) S->Data[++(S->Top1)] = X; else S->Data[--(S->Top2)] = X; return 1;}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)++]; }}Operation GetOp(){ char s[111]; scanf("%s", s); if (!strcmp(s, "Push")) return push; if (!strcmp(s, "Pop")) return pop; if (!strcmp(s, "End")) return end;}int IsEmpty(Stack S, int Tag){ if (Tag == 1) { if (S->Top1 == -1) return 1; return 0; } else { if (S->Top2 == S->MaxSize) return 1; return 0; }}void PrintStack(Stack S, int Tag){ while (!IsEmpty(S, Tag)) { printf("%d ", Pop(S, Tag)); } puts("");}int main(){ int N, Tag, X; Stack S; int done = 0; scanf("%d", &N); S = CreateStack(N); while (!done) { switch (GetOp()) { case push: scanf("%d %d", &Tag, &X); if (!Push(S, X, Tag)) printf("Stack %d is Full!\n", Tag); break; case pop: scanf("%d", &Tag); X = Pop(S, Tag); if (X == ERROR) printf("Stack %d is Empty!\n", Tag); break; case end: PrintStack(S, 1); PrintStack(S, 2); done = 1; break; } } return 0;}
阅读全文
0 0
- 6-3 在一个数组中实现两个堆栈(20 分)-pta_same_无聊的水体
- 4-7 在一个数组中实现两个堆栈 (20分)
- 4-7 在一个数组中实现两个堆栈 (20分)
- 4-7 在一个数组中实现两个堆栈 (20分)
- 4-7 在一个数组中实现两个堆栈 (20分)
- 4-7 在一个数组中实现两个堆栈 (20分) PTA
- PTA数据结构与算法题目集(中文)4-7 在一个数组中实现两个堆栈 (20分)
- 在一个数组中实现两个堆栈
- 在一个数组中实现两个堆栈
- 4-7 在一个数组中实现两个堆栈
- 数据结构与算法——在一个数组中实现两个堆栈(C语言)
- 一个数组实现两个堆栈
- 两个数组实现堆栈
- 在unity3D中实现MIKE ZERO对水体网格的边界优化(一)
- 用一个数组实现两个堆栈,最大地使用数组的空间,只要有空间就能入栈成功
- 在一个数组中找到最大的两个数
- C#--如何在一个函数中返回两个值(包含数组的参数)
- 堆栈的数组实现
- 【数据结构】红黑树——自平衡二叉搜索树
- 设计模式之工厂模式(factory pattern)
- linux 单用户模式
- Spring Boot整合MyBatis
- Android studio突然不提示了。
- 6-3 在一个数组中实现两个堆栈(20 分)-pta_same_无聊的水体
- SQLSTATE[08006] [7] FATAL: no pg_hba.conf entry
- Activity中使用Intent实现页面跳转与参数的传递
- FFmpeg 解码
- .NET/C#程序员技能表
- Java实现分页
- JS判断元素是否在数组中
- (求助)对某一颜色,设置透明度 alpha 后,其他使用该颜色的地方 受到影响!!!!原因未知
- 念整数