微信公众号:程序员周同学 关注可了解更多的教程及编程技巧。问题或建议,请公众号留言; 如果你觉得对你有帮助,欢迎点赞
线性表的链式表示之单链表单链表的特点单链表的储存结构单链表的结点单链表的储存结构
顺序表的链式表示其实就是我们所“熟知”的链表,链表分为:
单链表作为线性表的一种,首先肯定是具备线性表的两种特点的:
同样在这篇文章中主要讲插入和删除元素,因为另外两个操作都可以基于删除操作演变而来,所以改、查两个操作只给出代码。
C语言的链表可能是很多人的噩梦,因为要频繁用到指针操作。在顺序表中我们了解到,顺序表的每个元素的内存空间是连续的,而链表每个数据元素的内存空间是不连续的,所以必须要使用指针将所有的结点连接起来。如果有一个结点没有连接,那你就再也找不到他了。
单链表的结点结构
#include <stdio.h>
#include <stdlib.h>
typedef int DataType;//定义DataType类型
struct linkedList{
DataType data;//结构体数据域
struct linkedList *next;//结构体指针域
}
单链表的储存结构
//创建结构体指针,head,node,end用于创建链表,traverse用于遍历链表,此处无用
//明天将创建链表封装成函数
struct linkedList *head,*node,*end,*traverse;
int data;
head = NULL;
int n;
scanf("%d",&n);
for (int i = ; i < n; i++) {
scanf("%d",&data);
//malloc是stdlib.h中的函数,所以必须导入头文件
//为node指针分配一个struct linkedList大小的空间
node = (struct linkedList*)malloc(sizeof(struct linkedList));
//将node的数据域赋值为data
node->data = data;
//将node的指针域赋值为NULL,即:指向空内存
node->next = NULL;
//如果头结点为空,则把node赋值给head
if (head == NULL)
head = node;
//如果不为空,则将end的指针域指向node
else
end->next = node;
//将node赋值给end
end = node;
}
每一个结点通过next结构体指针指向下一个结点,直到最后一个结点指向NULL,即空内存。 以下是创建链表的图示: