线性表的链式表示和实现(一)
一、单链表的定义和表示
线性表链式存储结构的特点是:用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的)。
结点包括两个域:存储数据元素信息的域称为数据域;
指针域中存储的信息称作指针或链。
1.单链表可以用头指针的名字来命名,若头指针名是L,则把链表称作表L。
2.
typedef struct Lnode{ //声明结点的类型和指向结点的指针类型 ElemType data; //结点的数据域 struct Lnode *next;//结点的指针域
};Lnode,*LinkList; //LinkList为指向结构体Lnode的指针类型
LinkList p这种定义形式完全等价于Lnode*p
定义链表L:LinkList L;
定义结点指针p:Lnode *p; = LinkList p;
例:存储学生信息的单链表结点类型如下:
typedef Struct student{char num[8]; //数据域 char name[8]; //数据域 int score; //数据域 struct student*next; //指针域
};Lnode,*LinkList;
但为了统一链表的操作,通常如下定义:
typedef Struct{char num[8]; //数据域 char name[8]; //数据域 int score; //数据域
}ElemType;
typedef struct Lnode{ElemType data;//数据域struct Lnode *next;//指针域
}Lnode,*LinkList;
二、单链表基本操作的实现
1.初始化
①生成新结点作为头结点,用头指针指向头结点。
②头结点的指针域置空。
Status niList_L(LinkList &L){L=new LNode; //或L=(LinkList)malloc(sizeof(LNode)); L->next=NULL;return OK;
}
2.判断一个链表是否为空
空表:链表中无元素则称为空表(头指针和头结点仍然在)。
int ListEmpty(Linklist L){ //若L为空表,则返回1,否则返回0 if(L->next) //非空 return 0;elsereturn 1;
}
3.单链表的销毁
从头指针开始,依次释放所有结点(链表销毁后不存在)
Status DestoryList_L(LinkList &L){Lnode *p; //或LinkList p;while(L)p=L;L=L->next;delete p;
}
4.清空链表
链表仍存在,但链表中无元素,成为空链表(头指针和头结点仍然在)
Status ClearList(LinkList &L){ //将L重置为空表 Lnode *p,*q; //或LinkList p,q; p=L->next;while(p){ //没到表尾 q=p->next;delete p;p=q;}L->next=NULL; //头结点指针域为空 return OK;
}
5.求单链表的表长
从首元结点开始,依次计数所有结点
int ListLength_L(LinkList L){ //返回L中数据元素个数 LinkList p;p=L->next; //p指向第一个结点 i=0;while(p){ //遍历单链表,统计结点数 i++;p=p->next;}return i;
}
6.取值(取单链表中第i个元素的内容)
①从第一个结点(L->next)顺链扫描,用指针p指向当前扫描到的结点,p初值p=L->next。
②j做计数器,累积当前扫描过的结点数,j初值为1。
③当p指向扫描到的下一结点时,计数器j加1。
④当j==i时,p所指的结点就是要找的第i个结点。
Status GetElem_L(LinkList L,int i,ElemType &e){ //获取线性表L中的某个数据元素的内容,通过变量e返回 p=L->next;j=1; //初始化 while(p&&j<1){ //向后扫描,直到p指向第i个元素或p为空 p=p->next;++j;}if(!p||j>i) return ERROR; //第i个元素不存在 e=p->data; //取第i个元素 return OK;
}GetElem_L
单链表取值算法的平均时间复杂度为O(n)
线性表的链式表示和实现(一)相关推荐
- 数据结构和算法:(3)3.2线性表的链式存储结构
线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素也就是说你这个可以放在A地点,这个可以放在E地点,A地点和E地点中间可以隔开一个C地点和D地点,这样是允许的),这组存储单元可以存在 ...
- 带头结点的线性表的链式实现
复习了顺序实现后,自己模仿着写了链式实现 /*** @author lirui 带头结点的线性表的链式实现*/ public class MyLinkList<T> {// 内部类LNod ...
- 链表list(链式存储结构实现)_5 线性表的链式存储结构
系列文章参考资料为<大话数据结构>,源码为个人私有,未经允许不得转载 线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素,可以使连续的,也可以不连续,也就意味这些元素可以 ...
- JAVA数据结构 线性表的链式存储及其实现
2019独角兽企业重金招聘Python工程师标准>>> 2线性表的链式存储及其实现 虽然顺序表具有随机存取的特点是一种有用的存储结构但是也有缺陷: (1) 若需要给顺序表增 ...
- 线性表的链式表示——单链表
单链表 定义 线性表的链式存储又称单链表,它是指通过一组任意的存储单元来存储线性表中的数据元素.每个链表的结点,除存放元素自身的信息之外,还需要存放一个指向其后继结点的指针.即单链表的结构分为两部分, ...
- 五、【线性表】线性表的链式表示和实现
线性表的链式表示和实现 上节提到,由于顺序表的特点是逻辑关系上相邻的两个元素在物理位置上也相邻,因此可以随机存取表中任一元素.然而,这也导致了顺序表在执行插入或删除操作时,需要移动大量元素.本节来讨论 ...
- 从零开始学数据结构和算法(二)线性表的链式存储结构
链表 链式存储结构 定义 线性表的链式存储结构的特点是用一组任意的存储单元的存储线性表的数据元素,这组存储单元是可以连续的,也可以是不连续的. 种类 结构图 单链表 应用:MessageQueue 插 ...
- C和C++线性表的链式存储
C和C++线性表的链式存储 基本概念 链表技术领域推演 设计与实现 重要技术场景图 链表链式存储_插入 链表链式存储_删除 优点和缺点 基本概念 链式存储定义 为了表示每个数据元素与其直接后继元素之间 ...
- 【数据结构】线性表的链式存储-单链表
单链表的定义 线性表的链式存储又称为单链表,它是指通过一组任意的存储单元来存储线性表中的数据元素. 为了建立起数据元素之间的线性关系,对每个链表结点,除了存放元素自身的信息之外,还需要存放一个指向其后 ...
- 数据结构——线性表的链式表示
线性表的定义 线性表是具有相同数据类型的n(n >= 0)个数据元素的有限序列.其中n为表长,当n = 0时,该线性表是一个空表.若用L命名线性表,其一般表示为:L = (a1, a2, ... ...
最新文章
- PowerShell图形化编程1-原理
- 2410Init.s
- python慢在哪里_求大神分析一下我的python脚本慢在哪里?
- 软件开发人员想找的工作,随便聊聊,娱乐大家,请补充补充
- java args eclipse_不会在eclipse中运行含有args[]参数的Java代码,求指导
- android里R.layout.的问题
- matlab2c使用c++实现matlab函数系列教程-flipud函数
- python mysql传入多个参数
- java图片添加水印
- Kibana:使用 drilldown 从一个仪表板切换到另外一个仪表板
- html 图片导出excel,html静态表格导出到excel
- 计算机为什么采用二进制
- 刀片服务器的显示切换,刀片机服务器切换
- 如何在PPT中设置选择题
- Ubuntu 20.04 Micosoft edg 浏览器安装教程
- 数据分析模型 第十一章
- 子矩阵的和(Python实现)
- java二维数组添加数据_Java自学路线图
- Carbon 类常用函数
- OneDrive两台电脑之间文件同步操作