高级语言程序设计第九次作业
高级语言程序设计第九次作业
1
声明一个结构体类型,用来存放某个学生的姓名、学号、性别、班级、三科成绩,并且打印出来该学生信息。


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






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

4
设计一个程序使用typedef定义结构体类型的别名。


改名和定义可以一步到位;
5
建立一个链表,链表的节点个数为N(>5),使用从链尾到链头的建立方式和从链头到链尾的建立方式
头插法:



头插法流程:
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 (循环结束)
尾插法:



尾插法流程:
如果是空链表
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
编写程序删除链表中的某个节点。





补充:follow的内存要释放

流程图:
如果删除的是头节点,只要让头指针指向下一个节点,再把原来的头指针(用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()函数已经在上一个程序写出,这里就直接用了。



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



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

浙公网安备 33010602011771号