浙大 数据结构基础 week3 4-2
来源:互联网 发布:python celery安装 编辑:程序博客网 时间:2024/05/23 02:01
4-2 Two Stacks In One Array (6分)
Write routines to implement two stacks using only one array. Your stack routines should not declare an overflow unless every slot in the array is used.
Format of functions:
Stack CreateStack( int MaxElements );int IsEmpty( Stack S, int Stacknum );int IsFull( Stack S );int Push( ElementType X, Stack S, int Stacknum );ElementType Top_Pop( Stack S, int Stacknum );
where int Stacknum
is the index of a stack which is either 1 or 2; int MaxElements
is the size of the stack array; and Stack
is defined as the following:
typedef struct StackRecord *Stack;struct StackRecord { int Capacity; /* maximum size of the stack array */ int Top1; /* top pointer for Stack 1 */ int Top2; /* top pointer for Stack 2 */ ElementType *Array; /* space for the two stacks */}
Note: Push
is supposed to return 1 if the operation can be done successfully, or 0 if fails. If the stack is empty, Top_Pop
must return ERROR
which is defined by the judge program.
Sample program of judge:
#include <stdio.h>#include <stdlib.h>#define ERROR 1e8typedef int ElementType;typedef enum { push, pop, end } Operation;typedef struct StackRecord *Stack;struct StackRecord { int Capacity; /* maximum size of the stack array */ int Top1; /* top pointer for Stack 1 */ int Top2; /* top pointer for Stack 2 */ ElementType *Array; /* space for the two stacks */};Stack CreateStack( int MaxElements );int IsEmpty( Stack S, int Stacknum );int IsFull( Stack S );int Push( ElementType X, Stack S, int Stacknum );ElementType Top_Pop( Stack S, int Stacknum );Operation GetOp(); /* details omitted */void PrintStack( Stack S, int Stacknum ); /* details omitted */int main(){ int N, Sn, X; Stack S; int done = 0; scanf("%d", &N); S = CreateStack(N); while ( !done ) { switch( GetOp() ) { case push: scanf("%d %d", &Sn, &X); if (!Push(X, S, Sn)) printf("Stack %d is Full!\n", Sn); break; case pop: scanf("%d", &Sn); X = Top_Pop(S, Sn); if ( X==ERROR ) printf("Stack %d is Empty!\n", Sn); break; case end: PrintStack(S, 1); PrintStack(S, 2); done = 1; break; } } return 0;}/* Your function will be put here */
Sample Input:
5Push 1 1Pop 2Push 2 11Push 1 2Push 2 12Pop 1Push 2 13Push 2 14Push 1 3Pop 2End
Sample Output:
Stack 2 is Empty!Stack 1 is Full!Pop from Stack 1: 1
Pop from Stack 2: 13 12 11
Stack CreateStack( int MaxElements ){ Stack stack =(Stack)malloc(sizeof(struct StackRecord)); stack->Array = (ElementType *)malloc(sizeof(ElementType)*MaxElements); stack->Capacity=MaxElements; stack->Top1=-1; stack->Top2=MaxElements; return stack;}int IsEmpty( Stack S, int Stacknum ){ if(Stacknum==1) { return S->Top1==-1; } if(Stacknum==2) { return S->Top2==S->Capacity; }}int IsFull( Stack S ){ return S->Top2-S->Top1==1;}int Push( ElementType X, Stack S, int Stacknum ){ if(IsFull(S)) return 0; if(Stacknum==1) { S->Array[++S->Top1]=X; } else { S->Array[--S->Top2]=X; } return 1;}ElementType Top_Pop( Stack S, int Stacknum ){ if(IsEmpty(S,Stacknum)) return ERROR; if(Stacknum==1) { return S->Array[S->Top1--]; } if(Stacknum==2) { return S->Array[S->Top2++]; }}
1 0
- 浙大 数据结构基础 week3 4-2
- 浙大数据结构基础 week3 4-2
- 浙大 数据结构基础 week3 4-1
- 浙大 数据结构基础 week3 4-3
- 浙大 数据结构基础 week3 5-1
- 浙大数据结构基础4-2 Isomorphic (7分)
- 浙大 数据结构基础 week2 4-1
- 浙大数据结构基础4-1 Level-order Traversal (10分)
- 浙大PTA 4-2
- 浙大数据结构题目
- 浙大数据结构-HuffMan Code
- Week3-4Dimensionality reduction
- week3-4 类
- Week3
- week3
- week3
- week3
- week3
- 初识java项目管理工具maven
- Java 冒泡排序
- 网易2017校园招聘笔试题——优雅的点
- 使用AIDL跨进程通信
- 开发常见工具类
- 浙大 数据结构基础 week3 4-2
- POJ3469-Dual Core CPU
- 工作流系统开发之二十三 图解工作流的基本路由方式
- React Native State和Props
- HANDSFREE 2代小车 用xtion建图导航
- 浙大 数据结构基础 week3 4-3
- 工作流系统开发之二十四 如何构建支持多数据库的.net工作流系统
- bzoj 1951: [Sdoi2010]古代猪文 费马小定理+中国剩余定理+lucas定理+快速幂
- CentOs mysql 的安装与默认安装目录修改