尝试实现优先级队列插入dev c ++ IDE),即在优先级> gt的节点之前。新节点的优先级。用户的插入似乎发生在命令提示符上,但显示功能仅输出第一个节点。为什么没有显示其他队列元素?我担心它们不会被插入到第一位,这就是为什么在后续插入10,20,30然后删除..打印空队列..因为队列只有10 ..为什么?请建议。
注意:我没有包含delete和main函数,这里是代码,但它在程序中,显然..没有运行时异常发生..编译工作正常。但没有理想的输出。
#include<iostream>
using namespace std;
typedef struct node{ //template would enable generic datatype
int info,prn;
node * link;
}node;
node * start = 0;
int item,pri;
void insert(int item, int pri){
node * newnode = new node;
newnode-> info = item;
newnode-> prn = pri;
if(start == 0){//explicit check in insert if start is NULL.
start = newnode;
newnode->link = 0;
}
/*When you first run the program, start = 0 or NULL. You then say prev = start,
so as a result prev = NULL. So when you try to access prev->link, there's an access violation.*/
else{
node * prev= start;
node * temp = prev->link;
while (temp!= 0){
if(temp->prn > newnode->prn){
newnode -> link = prev -> link;
prev -> link = newnode;
break;
}
else{
if( temp->link == 0){
temp -> link = newnode;
newnode->link = 0;
break;
}
}
prev = prev->link;
}
}
}
void display(){
if(start == 0)
cout<<"Empty priority queue\n";
else{
cout<<("The Contents of the List are: ");
node *temp = start;
while(temp!=NULL){ //if we do while temp->link!=NULL, then last node won't print
cout<< temp->info;
cout<<" ---> ";
temp = temp->link;
}
}
}
答案 0 :(得分:1)
首次调用insert时,start将为0,但您将其分配给prev。在下一行,给你一个你调用prev->link
错误的那一行,这样当你调用一个NULL方法(调用未定义的行为)时,c ++会崩溃。如果start
为NULL,则应添加显式检入。
答案 1 :(得分:1)
首次运行程序时,start = 0或NULL。然后你说prev = start,结果prev = NULL。因此,当您尝试访问prev-&gt;链接时,存在访问冲突。