中易网

C++语言程序设计

答案:4  悬赏:40  
解决时间 2021-05-13 02:59

1.  阅读程序,对主要语句进行注释,理解程序算法思路并用图形或语言描述。

编写一个程序,首先创建一个按学号排序的学生信息链表,然后向此链表插入学生信息。

参考代码:

#include <iostream.h>

struct stu

{

       int number;

       char name[20];

       stu *next;   //指针next指向下一个结构体,以此形成一个链表

};

int main()

{

       stu s[3]={{1,"Jiang Tao",&s[1]},

                    {10,"Li Ming",&s[2]},

                 {20,"Yu Wei",NULL}};

       stu *head=s;   //头指针head

       stu *p;

       stu in={2,"Zhang San",NULL};

       if(head->number>in.number)

              in.next=head,head=&in;

       else

       {

              p=head;

              while(p->next!=NULL)

              {

                     if(p->next->number>in.number)

                     {

                            in.next=p->next;

                            p->next=&in;

                            break;

                     }

                     else p=p->next;

              }

              p->next=&in;

       }

       for(p=head;p!=NULL;p=p->next)

       {

              cout<<"number="<<p->number<<"  name="<<p->name<<endl;

       }

       return 0;

}

 

 

注:此为单链表的创建和插入算法程序

分析:

struct stu

{

       int number;

       char name[20];

       stu *next;   //指针next指向下一个结构体,以此形成一个链表

};

结点:

 

链表:

 

 

 

请用语言或图示法对上述链表的插入算法进行描述。

最佳答案

定义结构体变量名为stu


然后初始化链表并按number 排序赋值


  stu *head=s;建立stu链表的头指针,初始化一个结点为:stu in={2,"Zhang San",NULL};


做判断:如果头指针指向结点的Number大于给出结点的Number值时,把结点stu in插入到链表中,且做头指针 把next指向原来的地址。如果头指针指向结点的Number不大于给出结点的Number值时,把原链表中的头指针赋给一个结点指针让它向后移,移到下一个结点,再与stu in这个结点的Number值进行比较,如果满足了Number值大于stu in这个结点的Number值,那么就把这个stu in结点插入到这个结点之前,不然继续移动结点指针;直到遍历完原链表中所有的结点为止。实现在一个有序的链表中按次序插结点。

全部回答
c++中基本都不用结构体了;直接用class定义为对象了

首先定义一个结构体stu

在main函数中定义s[3]这个对象,再定义head储存s的头指针,定义p作为遍历链表的指针,接着定义了需要插入的结构体对象in

如果链表的头的number比in的number,就把头作为in的下一个,再把头换成in

否则就用p储存头的地址,在p的下一个不为空(没有遍历到链表末尾)的情况下,如果p的下一个的number大于in的number,就把in插入到p的后面,否则就将p后移一位,如果遍历到末尾仍无法插入,就把in直接放在末尾的后面

然后就是用p遍历链表对链表中的元素进行显示的过程

我是按照你的程序的步骤写的,应该可以对应上吧

#include <iostream.h>

struct stu   //定义结构体名为学生

{

    int number;

    char name[20];

    stu *next;   //指针next指向下一个结构体,以此形成一个链表

};

int main()

{

    stu s[3]={{1,"Jiang Tao",&s[1]},

    {10,"Li Ming",&s[2]},

        {20,"Yu Wei",NULL}};   //初始化赋值

    stu *head=s;   //头指针head

    stu *p;

    stu in={2,"Zhang San",NULL};

    if(head->number>in.number)   //头指针指向的结点的Number较大

    in.next=head,head=&in;   //插入name为Zhang San的结点并修改头指针

    else

    {

    p=head;

    while(p->next!=NULL)

    {

    if(p->next->number>in.number)   //判断下一个结点的Number是否大于需要插入的结点对应的Number值

        {

    in.next=p->next;

    p->next=&in;   //将name为Zhang San的结点插入在P结点之后并修改p->next指针

    break;

    }

    else p=p->next;   //移动指针到下一位,并继续判断

    }

    p->next=&in;

    }

    for(p=head;p!=NULL;p=p->next)

    {

    cout<<"number="<<p->number<<"  name="<<p->name<<endl;   //输出链表

    }

    return 0;

}

我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
新飞厨卫电器我想知道这个在什么地方
Stones War什么时候出
孕妇腿根疼为什么
梅西人品怎么样?
汉川市孝感中国移动手机专卖店地址在哪,我要
为什么找不到对象呢
空调扇那款的好?
手工杂酱面怎么去啊,有知道地址的么
写一个家具厂的简介(完整的写法)
什么是网恋,网恋能长久吗
我想使用笔记本电脑。用无线路由器行吗?
电脑主页总是被修改?
水瓶座8月24日的运程怎么样?
电子琴2个手怎么弹?
烫个蓬松直发大概多长时间?
推荐资讯
仙剑3茂茂的歌
n72的内存卡密码?
怎么样才能抽到绿色星元素,绿色心元素呢
我的电脑一案E键就有奇怪有难听的东西
谁知道男士洗面的,那个牌子好一点
玩臺服WOW玩一會就一直顯卡報錯誤及無法找到
系统维护中 暂时不能看好友信息是怎么回事
请问你们男生对我们女生都是以貌取人吗?
卡尼尔的洗面奶怎么样?
为什么一直下雨啊 ``哎 下雨心里好不舒服 怎
急!在澳洲境内如何申请573签证的问题
有什么办法最快把宠物弄死
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?