为什么使用两个堆栈的队列不起作用?

时间:2018-11-03 05:19:25

标签: c stack queue

我正在尝试使用2个堆栈来实现队列,但是我的代码无法正常工作。

您能发现错误吗?

from tkinter import *
root = Tk()

myFrame = Frame(root,text="Frame1")
myFrame.grid(row=1,column=1)
MyLabel = Label(myFrame,text="Label inside Frame1")
MyLabel.pack()

2 个答案:

答案 0 :(得分:0)

  

您能发现错误吗?

编译器发现错误的速度比堆栈溢出更快。

OP并未在启用所有警告的情况下进行编译,或者正在使用弱编译器

启用所有警告以节省时间。


int deq(stack*s1, stack*s2)int pop(stack *s)都有相同的问题。

在这种情况下,常见的缺陷是warning: control reaches end of non-void function [-Wreturn-type]

确保每个函数路径都返回一个值。

int pop(stack *s) {
  if (s->top == -1) {
    printf("UNDERFLOW");  // Notice, no return
  } else {
    return s->arr[s->top--];
  }
}

在声明前也使用push(&s1, ele);。这使功能签名冲突。在使用前声明或定义push()未定义行为(UB),这会使代码不可靠。


我建议更频繁地打印'\n'

// printf("entering");
printf("entering\n");
// or
puts("entering");  // \n automatically added.

答案 1 :(得分:0)

您正在dequeenque函数中传递指针地址。

push(&s2, pop(&s1)); --> push(s2, pop(s1)); x = pop(&s2); --> x = pop(s2); push(&s1, ele);-->push(s1, ele);

因为收到s1s2作为指向dequeenque函数的指针


还要考虑@ Mr.Chux提出的更改,请考虑编译器警告,您可以自己解决所有问题。