【发布时间】:2019-04-07 07:00:11
【问题描述】:
我正在尝试使用 2 个堆栈实现一个队列,但我的代码无法正常运行。
你能发现错误吗?
#include <stdio.h>
#include<stdlib.h>
#define MAX 5
typedef struct stack {
int top;
int arr[MAX];
} stack;
void enque(stack*s1, int ele) {
printf("entering");
push(&s1, ele);
printf("what a pain");
}
void push(stack*s, int ele) {
if (s->top == MAX - 1) {
printf("OVERFLOW");
} else {
s->arr[++s->top] = ele;
}
}
int deq(stack*s1, stack*s2) {
int x;
if (s1->top == -1 && s2->top == -1) {
printf("empty");
} else {
if (s2->top == -1) {
while (s1->top != -1) {
push(&s2, pop(&s1));
}
}
x = pop(&s2);
return x;
}
}
int pop(stack *s) {
if (s->top == -1) {
printf("UNDERFLOW");
} else {
return s->arr[s->top--];
}
}
void display(stack*s) {
printf("entered display");
int i;
for (i = 0; i <= s->top; i++) {
printf(" %d", s->arr[i]);
}
}
int main() {
int ch, ele, c;
stack s1, s2;
s1.top = -1, s2.top = -1;
do {
printf("1 - Enqueue2-deq3-display4-exit\n");
printf("Enter choice");
scanf("%d", &ch);
switch (ch) {
case 1:
printf("enter ele of ur choice");
scanf("%d", &ele);
enque(&s1, ele);
break;
case 2:
c = deq(&s1, &s2);
printf("%d", c);
break;
case 3:
display(&s1);
break;
case 4:
exit(0);
default:
printf("Wrong choice");
}
} while (ch != 5);
}
【问题讨论】:
-
请正确格式化您的代码,列出错误和您尝试过的事情。就其立场而言,这个问题是无法理解的。
-
我是新手,我不知道如何提交我的代码?你能告诉我怎么做吗
-
我删除了您在每行开头的
ender code here。然后我突出显示您的代码并按下文本框上方的 {} 按钮以指示我选择的是代码而不是文本。请阅读有关如何发布问题的文档。我们不是来为您工作的。 -
您的问题仍然无法回答。
-
对不起,thnx ..当我按下 case 1 时,我基本上遇到了分段错误,这基本上是 enque 它假设将元素推送到堆栈 1 但我的 s1 顶部没有增加它进入 enque 然后它假设将元素添加到 s1 因为 push 函数被调用但显示分段错误。