博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语言小结之链表
阅读量:5259 次
发布时间:2019-06-14

本文共 1763 字,大约阅读时间需要 5 分钟。

链表的学习

在数据结构中有一种结构叫做线性表,线性表是储存一个线性数据的表格,本文就简要的介绍一下线性表的构成。


 

一、线性表的定义

定义:由同种类型数据元素构成的有序数列的线性结构
长度、表头、表尾
List
线性表的形式有两种:一种是数组构成的表,另一种是链表。
所谓数组形成的表就是一个数组,如下定义所示

typedef struct{	ElementType Data[];	int last;}List

  

从上面可以看出一个线性表类型要包括一组数据和数据的最末尾。

这样有一个弊端,就是在对线性表插入时需要对其后面的所有元素挪动位置。
故我们采取另一种方式,也就是链表的结构
结构如下:

typedef struct Node{	ElementType Data;	struct Node *Next;}List;

  

二、链表基本功能实现

(1)求表的长度

void Length(List *Ptrl){	List *p = Ptrl;	int j =0;//记录数量	while(p)//结束符号为NULL	{		p = p->Next;		j++;	}	return j;}

  

(2)查找

按序号查找

List *FindKth(int K,List *Ptrl){	List *p = Ptrl;	int i = 1;	while(p != NULL && i 
Next; i++; } if(i == K) return p; else return NULL; }

  

按值查找

List *Find(Element Data,List *Ptrl){	List *p = Ptrl;	while(p != NULL && p->Data != Data)	{		p = p->Next;	}//找不到就是NULL	return p;}

  

(3)插入元素

在链表中某个位置插入某个元素
所以入口参数为元素内容、位置、链表。
出口参数为新的链表。

List *Insert(ElementType X,int i,List* Ptrl){	List *p,*s;//新链表和旧链表	//首先判断参数是否有效	p = FindKth(i-1,Ptrl);//获取i-1号节点	if(p == NULL)	{		printf("参数错误");		return NULL;	}	else	{		//如果在表头插入元素		if(i == 1){//重新申请一片空间			s = (List*)malloc(sizeof(List));			s->Data = X;			s->Next = Ptrl;			return Ptrl;		}		else{			s = (List*)malloc(sizeof(List));			s->Data = X;//交接工作  新节点插入			s->Next = p->Next;			p->Next = s;			return Ptrl;		}	}}

  

(4)删除元素

List* Delete(int i, List *PtrL)
1、先找到链表的第 i-1 个结点,用p 指向;
2、再用指针s 指向要被删除的结点:P的下一个节点
3、然后修改指针,删除s 所指结点;
4、最后释放s 所指结点的空间。

List* Delete(int i, List *PtrL){	List *p,*s;//新旧链表	//判断数据有效性	p = FindKth(i-1,Ptrl);//获取i-1号节点	if(p == NULL)	{		printf("参数错误");	}	else{		if(i == 1){//在头部插入元素			p = p->next;			free(s);			return Ptrl;		}		else{			s = p->Next;			p->Next = s->Next;			free(s);			return Ptrl;		}	}}

  

注意:在进行指针操作时要记住判断是否为空;

转载于:https://www.cnblogs.com/flyingjun/p/5173111.html

你可能感兴趣的文章
Linux服务器在外地,如何用eclipse连接hdfs
查看>>
react双组件传值和传参
查看>>
[Kaggle] Sentiment Analysis on Movie Reviews
查看>>
价值观
查看>>
mongodb命令----批量更改文档字段名
查看>>
使用 SharedPreferences 分类: Andro...
查看>>
TLA+(待续...)
查看>>
题解: [GXOI/GZOI2019]与或和
查看>>
MacOS copy图标shell脚本
查看>>
国外常见互联网盈利创新模式
查看>>
Oracle-05
查看>>
linux grep 搜索查找
查看>>
Not enough free disk space on disk '/boot'(转载)
查看>>
android 签名
查看>>
vue项目中使用百度统计
查看>>
android:scaleType属性
查看>>
SuperEPC
查看>>
mysql-5.7 innodb 的并行任务调度详解
查看>>
shell脚本
查看>>
Upload Image to .NET Core 2.1 API
查看>>