我正在编写c++代码来使用指针数组实现Queue.内存分配不正确.有什么建议吗

I am writing c++ code to implement Queue using pointer array.Memory allocation is not happening correctly.Any suggestion?

本文关键字:分配 内存 Queue 实现 不正确 什么 数组 指针 c++ 代码      更新时间:2024-09-21

这是我为使用指针数组的队列编写的代码。

#include <iostream>
#include <Queue>
using namespace std;
#define size 2
class Queue{  
public:      
int f;
int r;
int* arr;
public:
Queue(){
arr = new int [size];
int f, r = -1;
}
int isEmpty(){
if(r == -1 && f == -1){
cout<<"Queue underflow";
}
return 0;
}
int isFull(){
if(r == size - 1){
cout<<"Queue overflow";
}
return 0;
}
void enqueue(int val){
if( isFull()){
cout << "Cannot push element in Queue";
}
else{
arr[r] = val;
r++;
cout << "The value in Queue is" << " " << val << endl;
}
}
int dequeue(){
int a = -1;
if( isEmpty()){
cout << "Cannot pop element from Queue";
return 0;
}
else{
a = arr[f]; 
f++;
return a;
}
} 
};
int main(){
Queue q;
q.f = q.r = 0;
q.enqueue(1);
q.enqueue(2);
q.enqueue(3);
cout << "Dequeuing element is" << q.dequeue() << endl;
cout << "Dequeuing element is" << q.dequeue() << endl;
cout << "Dequeuing element is" << q.dequeue() << endl;
cout << "Dequeuing element is" << q.dequeue() << endl;
if( q.isEmpty()){
cout << "Queue is empty";
}
return 0;
}

这是输出

The value in Queue is 1
Queue overflow The value in Queue is 2
The value in Queue is 3
Dequeuing element is1
Dequeuing element is2
Dequeuing element is3
Dequeuing element is563

虽然我在打印一个元素后仍将大小设置为2,但它会显示"队列溢出",然后在我将第四个元素出列时也打印数据(尽管没有第四个(,它会打印带有荒谬数字的行。

正如Nathan Pierson正确指出的,函数isFullisEmpty总是返回0,这在if语句中被隐式转换为false,因此enqueuedequeue中的检查不起作用,函数总是被执行。此外,我想指出其他几点:

  1. 请不要使用预处理器指令来定义大小变量,而是使用constexpr。(constexpr int size = 2;(。您选择的名称(size(非常危险,大多数STL容器都有一个也称为size的方法。然后,预处理器指令将用2替换函数调用,从而破坏编译
  2. Queue类中有两个成员变量:rf。它们是什么意思?你在方法isFullisEmpty中检查它们,所以我想它们非常重要。请为变量使用描述性名称(例如使用正面和背面(
  3. 方法isFullisEmpty返回int以指示true或false值。在C++中,有一种特殊的类型被设计用来指示真或假:bool。请使用它而不是int