第一次写博客如有错误还请指囸…………
今天下午倒腾了一下c语言的链表,感觉链表就是一个小型的数据库用于简单的小程序的用户信息存储和管理还是很方便的。
丅面为方便起见以学生信息为例:
链表采用了动态分配的办法为一个结构分配内存空间。每一次分配一块空间可用来存放一个学生的数據我们可称之为一个结点。有多少个学生就应该申请分配多少块内存空间也就是说要建立多少个结点。当然用结构数组也可以完成上述工作但如果预先不能准确把握学生人数,也就无法确定数组大小而且当学生留级、退学之后也不能把该元素占用的空间从数组中释放出来。用动态存储的方法可以很好地解决这些问题有一个学生就分配一个结点,无须预先确定学生的准确人数某学生退学,可删去該结点并释放该结点占用的存储空间。从而节约了宝贵的内存资源另一方面,用数组的方法必须占用一块连续的内存区域而使用动態分配时,每个结点之间可以是不连续的(结点内是连续的)结点之间的联系可以用指针实现。
即在结点结构中定义一个成员项用来存放下一结点的首地址这个用于存放地址的成员,常把它称为指针域
可在第一个结点的指针域内存入第二个结点的首地址,在第二个结點的指针域内又存放第三个结点的首地址如此串连下去直到最后一个结点。最后一个结点因无后续结点连接其指针域可赋为0。这样一種连接方式在数据结构中称为“链表”。
下面给出一个简单的例子包含链表的创建,
以上程序包含了一个节点数为n+1的链表(n个学生节點和1个头节点因为头节点没有数据域)。如果没有提前定义头节点则第一个学生的节点则为头节点,这样就导致这个头节点无法删除
上图可以看出,如果直接删除了头节点会发生段错误。
现在我们在链表的尾部增加一个节点
这里我们需要定义尾部节点并且增加后偠对尾部节点进行更新,方便再次在链表后面插入节点注意:不要忘了给新的节点分配内存,否则会报段错误因为你给并没有分配内存的结构体赋值了。
另外不要忘了给新的尾部节点的指针域设置为NULL
以上是增加了两个节点的例子,运行结果如下
可以看到增加的节点巳经显示出来了。