weixin_45756650
μ★
2020-03-18 11:24
采纳率: 100%
浏览 325

c++链表:把数据插入链表,再打印,中间有其他语句时,则打印出了一个很奇怪的数,这是为什么?

把数据插入链表,再打印,中间有其他语句时,则打印出了一个很奇怪的数,这是为什么?

Evenlist.cpp
Evenlist::Evenlist()
{
    head=new evNode;
    head->next=NULL;
}
Evenlist::~Evenlist()
{
    evNode *p =head;
    while (p)
    {
        evNode *q = p;
        p = p->next;
        delete q;
    }
}
bool Evenlist::isEmpty()
{
    if(head->next==NULL)
        return true;
    else
        return false;
}
void Evenlist::addNode(evNode ev)//有序插入
{
     evNode*p,*q;
     evNode*pev=&ev;
     q=head;
     p=head->next;
     if(head->next==NULL){
        head->next=pev;
        cout<<"插在空链表的尾部:"<<endl;
        cout<<head->next->occurtime<<"   "<<head->next->ntype;
     }
     else{
        while(p!=NULL){
            if(pev->occurtime<p->occurtime){
                q->next=pev;
                pev->next=p;
                cout<<"插在中间"<<endl;
                break;
            }
            else{
                q=p;
                p=p->next;
            }
        }
          q->next=pev;
          cout<<"插在尾部:"<<endl;
        }

bool Evenlist::deleteNode(evNode*firstEv)
{
    if(isEmpty()){
      return false;
    }
    else
    {
     // firstEv=head->next;
      head->next=firstEv->next;
      delete firstEv;
      cout<<"成功删除";
      return true;
    }
}
void Evenlist::displayNode()
{
    int i=0;
    evNode *p ;
    p=head->next;
    if(isEmpty())
        cout<<"该链表为空"<<endl;
    while(p!=NULL)
    {
        i++;
        cout<<"第"<<i<<"个事件";
        cout << "(" <<p->occurtime<< ", "<<p->ntype<<")    ";
        p = p->next;
    }
    cout << endl;
}

int main()
{

evNode evltem;
Evenlist evList;
evltem.occurtime=0;evltem.ntype=-1;evltem.next=NULL;//初始化evltem
evList.addNode(evltem);

cout<<"打印链表"<<endl;//当有这个语句时输出很奇怪的数,没有时则能正确输出
evList.displayNode();
return 0;

}

Evenlist.h
typedef struct evnode{
   int  occurtime;
   int ntype;//事件类型
   struct evnode*next;
}evNode;
class Evenlist
{
    private:
        evNode *head;
    public:
        Evenlist();
        virtual ~Evenlist();
        bool isEmpty();
        void addNode(evNode ev);
        bool deleteNode(evNode*firstEv);
        void displayNode();
};

这是打印错误的截图
1. 图片说明
正确是会打印出(0,-1)

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • qq_44865780
    DY老王 2020-03-18 12:29
    已采纳

    void Evenlist::addNode(evNode ev)//有序插入,这个函数的参数设置是有问题的,要么你用指针传这个结构体的地址,要么你用&引用传值,像这句代码evNode *pev = &ev,你获取的只是形参的地址,怎么可能可以输出实参的值呢??去理解一下,传值,传指针和传引用的区别!

    点赞 评论

相关推荐