为什么我的C++;队列未正确释放? 我需要创建一个基于这个头(使用链表)的C++队列:
以下是我到目前为止的情况:为什么我的C++;队列未正确释放? 我需要创建一个基于这个头(使用链表)的C++队列:,c++,debugging,linked-list,queue,C++,Debugging,Linked List,Queue,以下是我到目前为止的情况: #include <iostream> #include "queue.h" using namespace std; queue::queue(){ current_size = 0; front_p = new node(NULL, NULL, NULL); back_p = new node(NULL, NULL, NULL); } void queue::enqueue(int item){ if (curr
#include <iostream>
#include "queue.h"
using namespace std;
queue::queue(){
current_size = 0;
front_p = new node(NULL, NULL, NULL);
back_p = new node(NULL, NULL, NULL);
}
void queue::enqueue(int item){
if (current_size == 0){
node * new_node;
new_node = new node(item, back_p, front_p);
front_p->prev = new_node;
back_p->next = new_node;
current_size = current_size + 1;
}
else if (current_size > 0){
node * new_node;
new_node = new node(item, back_p, back_p->next);
back_p->next = new_node;
new_node->next->prev = new_node;
current_size = current_size + 1;
}
}
int queue::dequeue(){
if (current_size > 0) {
node *remove = front_p->prev;
return remove->data;
remove-> prev->next = front_p;
front_p->prev = remove->prev;
delete remove;
current_size = current_size - 1;
}
else if (current_size == 0) {
return NULL;
}
else {
return NULL;
}
}
int queue::front(){
return front_p -> prev -> data;
}
bool queue::empty(){
return current_size == 0;
}
int queue::size(){
return current_size;
}
int queue::remove(int item){
for (int i = 0; i < current_size; i++){
}
return NULL;
}
int main(){
int int1, int2;
cout << "Welcome to the double linked list test program" << endl << "Please enter a #" << endl;
cin >> int1;
cout << "Another number" << endl;
cin >> int2;
queue * main_queue;
main_queue = new queue();
main_queue->enqueue(int1);
main_queue->enqueue(int2);
cout << "The front element is: " << main_queue->front() << endl;
cout << "I have dequeued: " << main_queue->dequeue() << endl;
cout << "The front element now: " << main_queue->front() << endl;
}
#包括
#包括“queue.h”
使用名称空间std;
队列::队列(){
当前_大小=0;
front_p=新节点(NULL,NULL,NULL);
back_p=新节点(NULL,NULL,NULL);
}
无效队列::排队(int项){
如果(当前_大小==0){
节点*新节点;
新节点=新节点(项目、背面、正面);
前\u p->prev=新建\u节点;
后退->下一步=新建节点;
当前大小=当前大小+1;
}
否则如果(当前大小>0){
节点*新节点;
新建节点=新建节点(项目,后退,后退->下一步);
后退->下一步=新建节点;
新建节点->下一步->上一步=新建节点;
当前大小=当前大小+1;
}
}
int queue::dequeue(){
如果(当前大小>0){
节点*remove=front\u p->prev;
返回删除->数据;
移除->上一步->下一步=前一步;
前面板->前面板=移除->前面板;
删除删除;
当前大小=当前大小-1;
}
else if(当前_大小==0){
返回NULL;
}
否则{
返回NULL;
}
}
int queue::front(){
返回前面板->前面板->数据;
}
bool队列::empty(){
返回当前_大小==0;
}
int队列::size(){
返回当前_大小;
}
int队列::删除(int项){
对于(int i=0;i<当前大小;i++){
}
返回NULL;
}
int main(){
int1,int2;
cout排队(int2);
这是你的问题:
if (current_size > 0) {
return front_p->data;
node * temp = front_p;
front_p = front_p->prev;
delete temp;
}
在if语句中要做的第一件事是从函数返回。在return
之后,函数中不再执行任何代码。我认为您需要更改出列代码,使其看起来像这样
if(current_size > 0)
{
node *remove = front_p->prev;
remove-> prev->next = front_p;
front_p->prev = remove->prev;
current_size = current_size - 1;
return remove->data;
}
如上所述,您的return语句不允许在它下面执行任何其他代码。您真的认为他应该让它看起来像这样吗?请检查if语句的最后两行。@Layne oops!最好不要完全删除它。:p已修复
if(current_size > 0)
{
node *remove = front_p->prev;
remove-> prev->next = front_p;
front_p->prev = remove->prev;
current_size = current_size - 1;
return remove->data;
}