我做了一个程序来实现堆栈,但它不能正常工作



代码没有抛出任何错误,但它没有接受我们在enqueue函数中传递的值。下面是代码:

#include <bits/stdc++.h>
#include <climits>
using namespace std;
struct Queue{
int *arr;
int front , rear;
int cap;
Queue(int c){
cap = c;
front = -1;
rear = -1;
arr = new int[cap];
}
void enqueue(int x){
if(rear == cap-1){
cout<<"The array is full";
}
rear++;
arr[rear] == x;
cout<<arr[rear]<<endl;

if(front == -1){
front = 0;
}
}
int dequeue(){
int data;
if(front == -1){`your text`
cout<<"Array is empty";
return INT_MIN;
}

data = arr[front];
arr[front] = 0;

if(front == rear){
front = rear = -1;
}
else{
front++;
}
return data;
}
};
int main() {
Queue q(3);
q.enqueue(24);
q.enqueue(30);
q.enqueue(42);
cout<<q.dequeue();
return 0;
}

enqueue函数正在接受一些垃圾值,而不是我们在实参中传递的整数值。

大家好,欢迎来到Stackoverflow。

问题是你忽略了编译器的警告。在https://godbolt.org/z/Pn1Mf115T下,我在一个在线编译器中抛出了你的代码,它告诉我/你:

<source>:20:19: warning: equality comparison result unused [-Wunused-comparison]
arr[rear] == x;
~~~~~~~~~~^~~~
<source>:20:19: note: use '=' to turn this equality comparison into an assignment
arr[rear] == x;
^~
=
1 warning generated.
Compiler returned: 0

编译器告诉你是比较而不是赋值。这就是为什么你的队列takes garbage values,它只是从来没有得到数据分配,输出是未初始化的内存从你的c风格数组。

经验法则:不要忽略编译器警告。

最新更新