[英]Implementation of Queue using Arrays in C++
我已经编写了这段代码,但对它为什么显示分段错误感到困惑。 我认为我的动态 memory 分配在这里给我带来了问题。 谁能告诉我是什么导致了这里的分段错误以及如何改进代码。
另外,请告诉我是否可以使用ClassName obj(); 创建 object; 并将其存储在堆栈而不是堆中。 或者在某些问题中是否需要此实现
#include<bits/stdc++.h>
using namespace std;
class Queue
{
public:
int rear, front, size,capacity;
int* arr;
Queue(int c)
{
capacity=c;
rear=c-1;
front=0;
int *arr= new int[c*sizeof(int)];
}
};
int isEmpty(Queue* queue)
{
return (queue->size==0);
}
int isFull(Queue* queue)
{
return (queue->size==queue->capacity);
}
void enqueue(Queue* queue, int x)
{
if(isFull(queue))
return;
queue->rear=(queue->rear+1)%queue->capacity;
queue->arr[queue->rear]=x;
queue->size+=1;
}
int dequeue (Queue* queue)
{
if(isEmpty(queue))
return 0;
int x = queue->arr[queue->front];
queue->front= (queue->front+1)%queue->capacity;
queue->size-=1;
}
int front (Queue* queue)
{
if(isEmpty(queue))
return 0;
return queue->arr[queue->front];
}
int rear (Queue* queue)
{
if(isEmpty(queue))
return INT_MIN;
return queue->arr[queue->rear];
}
int main()
{
Queue* queue=new Queue();
enqueue(queue,10);
enqueue(queue,20);
enqueue(queue,30);
enqueue(queue,40);
cout << "Front item is "
<< front(queue) << endl;
cout << "Rear item is "
<< rear(queue) << endl;
}
您的代码至少有 3 个问题:
首先,
Queue* queue=new Queue();
会导致编译错误,因为没有定义默认构造函数,而在 class Queue
中定义了另一个构造函数。
要解决此问题,您应该执行以下操作之一:
Queue* queue=new Queue(1024);
Queue
Queue
like Queue(int c = 1024)
的构造函数添加参数c
的默认值其次,function dequeue
有一个执行路径,执行到funciton的末尾,不执行任何return
语句。
好像return x;
应添加在 function 的末尾。
三、线路
int *arr= new int[c*sizeof(int)];
不好是因为:
sizeof(int)
因为要指定的是要分配的元素数,而不是字节数。该行应该是
arr= new int[c];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.