数据结构与算法之线性表(单链表的整表创建)

本文详细介绍了单链表的整表创建和删除算法,包括头插法和尾插法的具体实现,以及整表删除的过程。对比了单链表与顺序存储结构在存储分配、时间性能和空间性能上的优缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

单链表的整表创建

 

对于顺序存储结构的线性表的整表创建,我们可以用数组的初始化来直观理解

而单链表和顺序存储结构就不一样了,它不像顺序存储结构数据那么集中,它的数据可以是分散在内存各个角落的,它的增长也是动态的

对于每个链表来说,它所占用的空间大小和位置是不需要预先分配划定的,可以根据系统的情况和实际的需求即时生成

 

单链表的整表创建算法思路如下:

--声明一结点p和计数器变量i

--初始化一空链表L

--让L的头结点的指针指向NULL,建立一个带头结点的单链表

--循环实现后继结点的赋值和插入

 

头插法代码如下:

 

 

/*
*头插入法-----创建单链表的整表
*/

#include <stdlib.h>
#include <malloc.h>
typedef int ElemType;

typedef struct Stu
{
	ElemType data;//数据域
	struct Node *next;//指针域
}Node;

typedef struct Node *LinkList;
void CreateListHead(LinkList *L, int n)
{
	LinkList p;
	int i;
	srand(time(0));//随机种子的生成
	*L = (LinkList)malloc(sizeof(Node));//创建头结点
	(*L)->next = NULL;//先让这个头结点的next指向NULL,加括号是因为括号比->符号运算附低
	for ( i = 0; i < n; i++)
	{
		p = (LinkList)malloc(sizeof(Node));
		p->data = rand() % 100 + 1;
		p->next = (*L)->next;//让新加的p结点的next指向头结点的next
		(*L)->next = p;//再让头结点的next指向当前新增结点,新增的结点每次都是加在头结点后面
	}
}

 

尾插入代码如下:

 

 

 

/*
*尾插入法-----创建单链表的整表
*/

#include <stdlib.h>
#include <malloc.h>
typedef int ElemType;

typedef struct Stu
{
	ElemType data;//数据域
	struct Node *next;//指针域
}Node;

typedef struct Node *LinkList;
void CreateListHead(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;
		r->next = p;//把新加的结点赋值给r的next
		r = p;//新增的结点每次都是加在前一个新增结点后面
	}
	r->next = NULL;//让新加的结点的next指向NULL,保证每次加的结点都在末尾
}

 

单链表的整表删除算法思路:


--声明结点p和q

--将第一个结点赋值给p,下一结点赋值给q

--循环执行释放p和将赋值给p的操作

 

代码如下:

 

/*
*单链表的整表删除
*/

#include <stdlib.h>
#include <malloc.h>
typedef int ElemType;

typedef struct Stu
{
	ElemType data;//数据域
	struct Node *next;//指针域
}Node;

typedef struct Node *LinkList;
void ClearList(LinkList *L)
{
	LinkList p, q;
	p = (L*)->next;//把第一个结点赋值给p

	while (p)//只要p!=NULL
	{
		q = p->next;//把p的下一个结点赋值给q
		free(p);//释放p
		p = q;//再把q赋值个p
	}
	(*L)->next = NULL;//最后头结点的next指向NULL,即是空链表了
	return OK;
}

 

单链表结构和顺序存储结构的优缺点:

 

1,存储分配方式

--顺序存储结构用一段连续的存储单元依次存储线性表的数据元素

--单链表采用链式存储结构,用一组任意的存储单元存放线性表的元素

 

2,时间性能

--查找

        顺序结构O(1)

        单链表O(n)

--插入和删除

        顺序存储结构需要平均移动表长的一半,时间为O(n)

        单链表在计算出某个位置指针后,插入和删除时间都是O(1)

 

3,空间性能

--顺序存储结构需要预先分配存储空间,分大了,容易造成空间浪费,分小了,容易发生溢出

--单链表不需要分配存储空间,只要内存有就可以分配,元素个数也不受限制

 

 

根据上面比较,得出一些经营性的结论:

(1)若线性表需要频繁查找,很少进行插入和删除操作,宜采用顺序存储结构

(2)需要频繁插入和删除操作,宜采用单链表存储结构

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值