Souka2 发表于 2022-9-30 22:21:40

共享栈问题求助

【问题描述】

请设计两个顺序栈共享一个存储空间形成的共享栈,完成共享栈的入栈、出栈和判断栈空、输出等四个函数,并在主函数调用以上基本函数进行测试。

为了便于测试,请大家设置共享栈的容量为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;
    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--;
      }printf("\n");
    }else{
         while(S->top2!=MaxSize){
            printf("stack%d:",i);
            printf("%d ",S->date);
            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 = e;
      }
      else
      {
            S->top2--;
            S->date = 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);
}

ba21 发表于 2022-9-30 23:12:32

参考下这里吧。
https://blog.csdn.net/m0_46539322/article/details/123801817
页: [1]
查看完整版本: 共享栈问题求助