高级语言程序设计第九次作业

高级语言程序设计第九次作业

1

声明一个结构体类型,用来存放某个学生的姓名、学号、性别、班级、三科成绩,并且打印出来该学生信息。
image
image

2

定义一个结构体数组,用来存放班级中N个学生以上信息,编写三个函数进行信息输入、排序和输出。分别使用数组和指针作为函数参数,完成学生信息输入、以及成绩从小到大排序、按排序顺序进行信息输出。
image
image
image
image
image
image

3

设计一个程序以指针和结构体变量名分别访问结构体变量的成员,进行输出
image

4

设计一个程序使用typedef定义结构体类型的别名。
image
image
改名和定义可以一步到位;

5

建立一个链表,链表的节点个数为N(>5),使用从链尾到链头的建立方式和从链头到链尾的建立方式

头插法:

联想截图_20251211121718
联想截图_20251211121730
联想截图_20251211121736
头插法流程:

head
 ↓
[3] → [2] → [1] → NULL

p->next=head//新节点等于head,也就是指向头元素
p → [ num=4 | next= ]──┐
                       ↓
                      [3] → [2] → [1] → NULL

head=p;//头指针指向新节点;
head
 ↓
[4] → [3] → [2] → [1] → NULL

释放空间

第1圈:head→[A]→[B]→[C]→NULL
       q = A->next  (q指向B)
       free(A)      (A被拆掉)
       head = q     (head现在指向B)

第2圈:head→[B]→[C]→NULL
       q = B->next  (q指向C)
       free(B)
       head = q     (head现在指向C)

第3圈:head→[C]→NULL
       q = C->next  (q是NULL)
       free(C)
       head = NULL  (循环结束)

尾插法:

联想截图_20251211155831
联想截图_20251211155845
联想截图_20251211155816
尾插法流程:

如果是空链表
head ─┐
tail ─┘
      ↓
    [40 | next=NULL]

不是空:
head → [10] → [20] → [30] → NULL
                        ↑
                       tail


tail->next=p;原来的tail指向新节点p
head → [10] → [20] → [30] → [40] → NULL
                        ↑       ↑
                       tail     p


tail=p;让这个新节点变成尾巴
head → [10] → [20] → [30] → [40] → NULL
                                ↑
                              tail

6

对建立好的链表进行遍历。
遍历已经再5实现了
原理:
定义一个新的struct Node类型的指针q,让q等于头指针,当q不为空时,打印q指向的数据,再用q=q->next让q变成指向下一个节点的指针

7

编写程序删除链表中的某个节点。
联想截图_20251211170339
联想截图_20251211170350
联想截图_20251211170401
联想截图_20251211170408
联想截图_20251211170323
补充:follow的内存要释放
image
流程图:

如果删除的是头节点,只要让头指针指向下一个节点,再把原来的头指针(用temp存放)释放掉就好了
如果是中间的节点:
head
 ↓
[1] → [2] → [3] → [4] → [5] → NULL

要删除第三个节点,用循环让pre走到3的位置
head        pre
 ↓           ↓
[1] → [2] → [3] → [4] → [5] → NULL
这个时候,让指针follow=pre->next就是节点4的位置
pre->next=follow->next就是让pre节点指向follow的下一个节点,也就是5节点,所以这时候3节点和5节点就连接起来了
然后再把follow释放,就是释放掉节点4;

8

编写程序根据一定的条件,删除多个节点,该条件要在作业中写出
条件:删除所有值为5的节点
build()和printlink()函数已经在上一个程序写出,这里就直接用了。
image
image
image

9

编写程序根据一定的条件,插入多个节点,该条件要在作业中写出
条件:在所有偶数后面插入5
联想截图_20251215130713
联想截图_20251215130720
联想截图_20251215130359

思考与总结

链表看着很复杂但是只要逻辑搞清楚了还是可以理解的,还是要多做多练。👌👌👌

posted @ 2025-12-15 13:09  黄洁琳  阅读(8)  评论(0)    收藏  举报