一、单链表的整表创建
1.顺序结构的线性表的整表创建
顺序结构的线性表的整表创建,我们可以用数组的初始化来直观理解,因为线性表的顺序存储结构实际就是在数组的基础上,增加了一个变量来存储当前线性表的长度构成的一个结构。
2.单链表的整表创建
- 单链表和顺序存储结构的线性表不一样,因为它不像顺序存储结构数据那么集中,它的数据可以是分散在内存的各个角落,它的增长也是动态的。
- 单链表所占用空间的大小和位置是不需要预先分配预定的,可以根据系统的情况和实际的需求即时生成。
- 创建单链表的过程是一个动态生成链表的过程,从“空表”的初始状态起,依次建立各元素结点并逐个插入链表。
3.单链表整表创建的算法思路:
- 声明一个结点p和计数器变量i;
- 初始化一空链表L;
- 让L的头结点的指针指向NULL,即建立一个带头结点的单链表;
- 循环实现后继结点的赋值和插入。
4.头插法建立单链表
- 头插法从一个空表开始,生成新结点,读取数据存放到新节点的数据域中,然后将新结点插入到当前链表的表头上,直到结束为止。
- 简单说,就是将新加进的元素放在表头后的第一个位置,即让新插入的元素的next指向之前头结点指向的元素,然后让表头的next指向新插入的结点。
代码实现:
// 头插法建立单链表 CreateListHead.c
void CreateListHead(LinkList *L, int n){
LinkList p;
int i;
srand(time(0)); // 初始化随机数种子,为后面给单链表赋值随机数做准备
*L = (LinkList)maclloc(sizeof(Node)); // 生成一个结点
(*L)->next = NULL; //
for(i=0; i<n; i++){
p = (LinkList)maccloc(sizeof(Node));
p->data = rand()%100 + 1; // rand()%100得到0~99的随机数,加上1,就得到了1~100的随机数了
p->next = (*L)->next; // 将新插入的p的next指向表头的next
(*L)->next = p; // 然后将表头的next指向新插入的p
}
}
5.尾插法建立单链表
头插法建立单链表算法虽然简单,但是生成的链表中结点的次序和输入的顺序相反。
代码实现:
// 尾插法建立单链表 CreateListTail.c
void CreateListTail(LinkList *L, int n){
LinkList p, r;
int i;
srand(time(0)); // 初始化随机数种子,为后面给单链表赋值随机数做准备
*L = (LinkList)maclloc(sizeof(Node)); // 生成一个结点
r = *L // 让r指向链表的尾部
for(i=0; i<n; i++){
p = (LinkList)maccloc(sizeof(Node));
p->data = rand()%100 + 1; // rand()%100得到0~99的随机数,加上1,就得到了1~100的随机数了
r->next = p; // 将链表的尾部r的next指向新插入的p
r = p; // 然后链表的尾部r移动到新插入的结点p处,保证每执行依次循环r始终都在链表的尾部
}
}
本文为原创文章,如果对你有一点点的帮助,别忘了点赞哦!比心!如需转载,请注明出处,谢谢!