C ++中的优先级队列INSERTION和DISPLAY函数

时间:2013-03-20 09:42:03

标签: c++ queue

尝试实现优先级队列插入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;
          }
     }             
}

2 个答案:

答案 0 :(得分:1)

首次调用insert时,start将为0,但您将其分配给prev。在下一行,给你一个你调用prev->link错误的那一行,这样当你调用一个NULL方法(调用未定义的行为)时,c ++会崩溃。如果start为NULL,则应添加显式检入。

答案 1 :(得分:1)

首次运行程序时,start = 0或NULL。然后你说prev = start,结果prev = NULL。因此,当您尝试访问prev-&gt;链接时,存在访问冲突。