μ★ 2020-03-18 11:24 采纳率: 0%
浏览 344
已采纳

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条回答 默认 最新

  • DY老王 2020-03-18 12:29
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题