|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
【问题描述】
请设计两个顺序栈共享一个存储空间形成的共享栈,完成共享栈的入栈、出栈和判断栈空、输出等四个函数,并在主函数调用以上基本函数进行测试。
为了便于测试,请大家设置共享栈的容量为12;
希冀平台测试数据及说明:
1)输出栈1; 空栈输出stack1: empty
2)输出栈2; 空栈输出stack2: empty
3)输入整数n;
4)将n以内(不含n)的奇数入栈1;若栈满,输出full,停止入栈
5)将n以内的偶数(不含n)入栈2;若栈满,输出full,停止入栈
6)栈1出栈, 输出该元素;
7)栈2出栈,输出该元素;
8)输出栈1;(从栈顶到栈底)
9)输出栈2;(从栈顶到栈底)
【样例输入】
6
【样例输出】
stack1: empty
stack2: empty
5
4
stack1:3 1
stack2:2
不清楚为啥报错,大佬救救我
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MaxSize 12
typedef struct
{
int date[MaxSize];
int top1;
int top2;
} DStack;
void InitDSstack(DStack *S)
{
S = (DStack *)malloc(sizeof(DStack));
S->top1 = -1;
S->top2 = MaxSize;
}
bool DStackEmpty(DStack *S, int i)
{
if (i == 1)
{
return S->top1 == -1;
}
else
{
return S->top2 == MaxSize;
}
}
void DispDstack(DStack *S, int i)
{
if (DStackEmpty(S, i) == 1)
{
printf("stack%d: empty\n");
}
else{if(i==1){
while(S->top1!=-1){
printf("stack%d:",i);
printf("%d ",S->date[S->top1]);
S->top1--;
}printf("\n");
}else{
while(S->top2!=MaxSize){
printf("stack%d:",i);
printf("%d ",S->date[S->top2]);
S->top2++;
}printf("\n");
}
}
}
void Push(DStack *S, int i, int e)
{
if (S->top1 + 1 == S->top2)
{
printf("full\n");
}
else
{
if (i == 1)
{
S->top1++;
S->date[S->top1] = e;
}
else
{
S->top2--;
S->date[S->top2] = e;
}
}
}
int main()
{
DStack S;
InitDSstack(&S);
DispDstack(&S, 1);
DispDstack(&S, 2);
int n;
scanf("%d", &n);
for (int e = 1; e < n; e = e + 2)
{
Push(&S, 1, e);
}
for (int e = 2; e < n; e = e + 2)
{
Push(&S, 2, e);
}
DispDstack(&S, 1);
DispDstack(&S, 2);
}
|
|