⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 例11.8.txt

📁 这是有清华大学出版社出版
💻 TXT
字号:
例11.8写一函数建立一个有3名学生数据的单向动态链表。 
 先考虑实现此要求的算法(见图11.12)。

设3个指针变量:head、p1、p2,它们都是用来指向struct student类型数据的。先用malloc函数开辟第一个结点,并使p1、p2指向它。然后从键盘读入一个学生的数据给p1所指的第一个结点。我们约定学号不会为零,如果输入的学号为0,则表示建立链表的过程完成,该结点不应连接到链表中。先使head的值为NULL(即等于0),这是链表为“空”时的情况(即head不指向任何结点,链表中无结点),以后增加一个结点就使head指向该结点。
如果输入的p1->num不等于0,则输入的是第一个结点数据(n=1),令head=p1,即把p1的值赋给head,也就是使head也指向新开辟的结点(图11.13 )。p1所指向的新开辟的结点就成为链表中第一个结点。然后再开辟另一个结点并使p1指向它,接着输入该结点的数据(见图11.14(a))。如果输入的p1->num≠0,则应链入图11.13第2个结点(n=2),由于n≠1,则将p1的值赋给p2->next,此时p2指向第一个结点,因此执行“p2->next=p1” 就将新结点的地址赋给第一个结点的next成员,使第一个结点的next成员指向第二个结点(见图11.14(b))。接着使p2=p1,也就是使p2指向刚才建立的结点,见图11.14(c)。接着再开辟一个结点并使p1指向它,并输入该结点的数据(见图11.15(a)),在第三次循环中,由于n=3(n≠1),又将p1的值赋给p2->next,也就是将第3个结点连接到第2个结点之后,并使p2=p1,使p2指向最后一个结点(见图11.15(b))。
  再开辟一个新结点,并使p1指向它,输入该结点的数据(见图11.16(a))。由于p1->num的值为0,不再执行循环,此新结点不应被连接到链表中。此时将NULL赋给p2->next,见图11.16(b)。建立链表过程至此结束,p1最后所指的结点未链入链表中,第3个结点的next成员的值为NULL,它不指向任何结点。虽然p1指向新开辟的结点,但从链表中无法找到该结点。

  建立链表的函数可以如下:
  #define NULL 0
  #define LEN sizeof(struct student)
  struct student
  {long num;
      float score;
      struct student

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -