数据结构(四)——单链表的整表创建与删除
2016-11-15 16:50
183 查看
单链表整表的创建思路:
1.说明一结点p和计数器变量i;
2.初始化一空链表L;
3.让L的头结点的指针指向NULL,即建立一个带头结点的单链表
4.循环
生成一新结点赋值给p;
赋值;
将p插入到头结点与千亿新结点之间;
代码:(这里的赋值采用随机数赋值)
[cpp] view
plain copy
void CreateListHead(LinkList *L,int n)
{
LinkList p;
int i;
srand(time(0)); //初始化随机数
*L = (LinkList)malloc(sizeof(Node));
(*L)->next = NULL;
for(i = 0; i < n; i++)
{
p = (LinkList)malloc(sizeof(Node));
p->data = rand() %100 +1; //随机生成100以内的数字
p->next = (*L)->next;
(*L)->next = p;
}
}
上述代码采用的是头插法。我们也可以采用尾插法:
代码如下:
[cpp] view
plain copy
void CreateListTail(LinkList *L,int n)
{
LinkList p,r;
int i;
srand(time(0)); //初始化随机数
*L = (LinkList)malloc(sizeof(Node));
r = *L;
for(i = 0; i < n; i++)
{
p = (LinkList)malloc(sizeof(Node));
p->data = rand() %100 +1; //随机生成100以内的数字
r->next = p;
r = p;
}
r->next = NULL;
}
下面介绍单链表的整表删除:
思路如下:
1.声明结点p和q;
2.第一个结点赋值给p
3.循环
下一结点赋值给q;
释放p;
q赋值给p;
代码举例:
[cpp] view
plain copy
int ClearList(LinkList *L)
{
LinkList q,p;
p = (*L)->next;
while(p) //没到链表尾
{
q = p->next;
free(p);
p = q;
}
(*L)->next = NULL;
return success;
}
单链表结构与顺序存储结构的优缺点:
在存储分配方式上:顺序存储结构用一段连续的存储单元依次存储数据元素;而单链表用一组任意的存储单元存放元素
在时间性能上:
查找:
1.顺序存储结构为O(1);单链表为O(n);
2.插入和删除
顺序存储结构时间为O(n);单链表的时间仅为O(1)
在空间性能上:
顺序存储结构需要预分配存储空间,分配的空间过大造成浪费,过小又不够
单链表不需要分配,只要有就可以分配,元素个数也没有限制
1.说明一结点p和计数器变量i;
2.初始化一空链表L;
3.让L的头结点的指针指向NULL,即建立一个带头结点的单链表
4.循环
生成一新结点赋值给p;
赋值;
将p插入到头结点与千亿新结点之间;
代码:(这里的赋值采用随机数赋值)
[cpp] view
plain copy
void CreateListHead(LinkList *L,int n)
{
LinkList p;
int i;
srand(time(0)); //初始化随机数
*L = (LinkList)malloc(sizeof(Node));
(*L)->next = NULL;
for(i = 0; i < n; i++)
{
p = (LinkList)malloc(sizeof(Node));
p->data = rand() %100 +1; //随机生成100以内的数字
p->next = (*L)->next;
(*L)->next = p;
}
}
上述代码采用的是头插法。我们也可以采用尾插法:
代码如下:
[cpp] view
plain copy
void CreateListTail(LinkList *L,int n)
{
LinkList p,r;
int i;
srand(time(0)); //初始化随机数
*L = (LinkList)malloc(sizeof(Node));
r = *L;
for(i = 0; i < n; i++)
{
p = (LinkList)malloc(sizeof(Node));
p->data = rand() %100 +1; //随机生成100以内的数字
r->next = p;
r = p;
}
r->next = NULL;
}
下面介绍单链表的整表删除:
思路如下:
1.声明结点p和q;
2.第一个结点赋值给p
3.循环
下一结点赋值给q;
释放p;
q赋值给p;
代码举例:
[cpp] view
plain copy
int ClearList(LinkList *L)
{
LinkList q,p;
p = (*L)->next;
while(p) //没到链表尾
{
q = p->next;
free(p);
p = q;
}
(*L)->next = NULL;
return success;
}
单链表结构与顺序存储结构的优缺点:
在存储分配方式上:顺序存储结构用一段连续的存储单元依次存储数据元素;而单链表用一组任意的存储单元存放元素
在时间性能上:
查找:
1.顺序存储结构为O(1);单链表为O(n);
2.插入和删除
顺序存储结构时间为O(n);单链表的时间仅为O(1)
在空间性能上:
顺序存储结构需要预分配存储空间,分配的空间过大造成浪费,过小又不够
单链表不需要分配,只要有就可以分配,元素个数也没有限制
相关文章推荐
- 数据结构(三)——单链表的整表创建与删除
- 数据结构 单链表的创建 插入 删除
- 数据结构单链表插入\整表删除\整表创建\
- 数据结构----单链表的创建、插入、删除、读取、遍历
- C语言实现单链表的创建、插入、删除
- 单链表的创建和删除
- 数据结构:头插法、尾插法创建单链表,求链表长度、查找、插入、删除、合并
- 单链表的创建,删除,插入,排序
- 数据结构之链表操作,创建,插入,删除,查找。
- c语言实现单链表的操作:创建,删除,插入,反转, 排序等
- C++单链表的操作(创建,删除,打印,遍历,插入)
- 单链表的创建, 删除, 插入, 输出
- 数据结构单链表创建(头插法,尾插法)java/c/c++
- 数据结构研究--创建单链表
- c语言实现对传统单链表的创建、添加 遍历 删除 反转元素操作
- 数据结构学习(三)——单链表的操作之查找、删除、插入。
- Java数据结构-线性表之单链表应用-重复节点的删除
- 数据结构之 单链表的基本操作(创建、取值、插入、删除)
- 数据结构顺序表的操作全集(创建,遍历,插入,删除,排序等等)
- 数据结构_单链表的插入与删除_C语言源代码