线性表链式存储的基本操作
线性表的顺序存储结构的特点是逻辑关系上相邻的两个元素在物理位置上也相邻,因此可以随机存取表中任意元素。线性表链式存储结构特点是用一组任意的存储单元存储数据元素,为了表示每个数据元素ai与其直接后继数据元素ai+1之间的逻辑关系,对数据元素ai来说,除了存储本身信息外,还要存储指示其直接后继的信息(即直接后继的存储位置)。这两部分信息称为数据元素ai的存储映像,称为结点(node)。它包括两个域,其中存储数据信息的称为数据域,存储直接后继存储位置的域称为指针域。
1、线性表的单链表存储结构
typedef struct Node{ //节点类型定义 ElemType data; //数据域 struct Node *next; //指针域 }Node,*LinkList; //LinkList为结构指针类型 LintList L; //为单链表的头指针,也称为单链表L
假设L是LinkList型变量,则L是单链表的头指针,它指向表中第一个节点,若L为空(L=NULL),则所表示的线性表为空表,其长度n为0,有时我们在单链表的第一个结点前附设一个结点,称为“头结点”,头结点的数据域可以不存储任何信息,头结点的指针域指向第一个结点的指针(即第一个元素结点的存储位置)。
2、初始化单链表
//单链表的初始化 Status ListInit_L(LinkList &L){//构造一个空的单链表LL = (LinkList)malloc(sizeof(Node)); //产生一个头节点,并使L指向此头节点 if(!L)exit(OVERFLOW); //初始化失败L->next = NULL; //指针域为空return OK; }
3、单链表的销毁
//销毁单链表 Status ListDelete_L(LinkList &L){//前提条件:单链表已经存在 LinkList q;if(L){q=L->next;//指向第一个节点 free(L);//释放L L=q;}retun OK; }
4、清空单链表
//单链表的清空 Status ListClear_L(LinkList &L){//前提条件,L存在,将L置为空表 LinkList p,q;p=L->next;while(p){q=p->next;free(p);p=q;}L->next=NULL;//头节点指针域为空return 0; }
5、判断单链表是否为空
//判断单链表是否为空 Status ListEmpty_L(LinkList &L){//初始条件:线性表L已存在//操作结果:若L为空表,则返回TRUE,否则返回FALSEif(L->next)//非空return true;elsereturn false; }
6、计算单链表的长度
//计算单链表的长度 int ListLength_L(LinkList &L){//初始条件:线性表L已存在//操作结果:返回L中数据元素个数int i=0;LinkList p = L->next; //指向第一个节点 while(p){//p没到表尾i++;p=p->next; }return i; }
7、取元素
//取单链表中的数据元素 Status ListGet_L(LinkList &L,int i,ElemType &e){//初始条件:L为带头结点的单链表的头指针//操作结果:当第i个元素存在时,其值赋给e并返回OK,否则返回ERRORint j=1;//计数器LinkList p=L->next;//指向第一个节点while(p || j<i){//顺指针向后查找,直到p指向第i个元素或p为空 p=p->next;j++;}if(!p || j>i)//第i个元素不存在 return ERROR;e = p->data;//取出第i个元素return OK; }
8、插入
//单链表的插入操作 Status ListInsert_L(LinkList &L, int i, ElemType e){//在带头结点的单链表L中的第i个位置之前插入元素eLinkList p=L;int j=0;while(p && j<i-1){//寻找第i-1的位置 p=p->next;j++;}if(!p || j>i-1)return ERROR;s = (LinkList)malloc(sizeof(Node));//创建一个新的结点ss->data=e;s->next=p->next;p->next=s;return OK; }
9、删除
//删除 Status ListDelete_L(LinkList &L, int i, ElemType &e){//在带头结点的单链表L中,删除第i个元素,并由e返回其值LinkList p=L;//指向第一个节点 LinkList q;int j = 0;//计数器while(p && j<i-1){//寻找第i个结点 p->next;j++;}while(!p || j>i-1)return ERROR;q = p->next;p->next = q->next;e = q->data;free(p);return OK; }
转载于:https://www.cnblogs.com/geziyu/p/9691223.html
线性表链式存储的基本操作相关推荐
- 数据结构(一)线性表链式存储实现
(一)前提 在前面的线性表顺序存储结构,最大的缺点是插入和删除需要移动大量的元素,需要耗费较多的时间.原因:在相邻两个元素的存储位置也具有邻居关系,他们在内存中的位置是紧挨着的,中间没有间隙,当然无法 ...
- 数据结构--线性表链式存储
系列文章目录 第二话 数据结构之线性表 文章目录 一.线性表的基本操作步骤 1.存储结构 2.基本操作 3.实现运用 二.线性表的插入 三.线性表的删除 四.总结 前言 为了克服顺序表的缺点,可以采用 ...
- Linux从入门到精通系列之线性表链式存储结构-单链表原理解析
前言 线性表的链式存储结构的特点就是用一组任意的存储单元存储线性表的数据元素,这组存储单元可以在内存中未被占用的任意位置. 比起顺序存储结构每个元素只需要存储一个位置就可以了.现在链式存储结构中,除了 ...
- python 单链表节点怎么快速定义_线性表链式存储结构之单链表
线性表的链式存储结构的特点就是用一组任意的存储单元存储线性表的数据元素,这组存储单元可以在内存中未被占用的任意位置.比起顺序存储结构每个元素只需要存储一个位置就可以了.现在链式存储结构中,除了要存储数 ...
- 《大话数据结构》----第三章---线性表链式存储结构
目录 一.为啥要单独说线性表的链式存储结构? 二.这些链式存储结构分别是什么样的? 2.1 单链结构是怎么样的? 2.2 静态链表又是怎么定义的呢? 2.3循环链表是如何定义的? 2.4双向链表是为什 ...
- 数据结构——线性表链式存储结构
目录 1.链式存储结构定义 2.单链表 3.头指针与头结点 4.单链表存储结构 5.单链表的读取 6.单链表的插入 7.单链表的删除 1.链式存储结构定义 线性表的链式存储结构是用一组任意的存储单元存 ...
- 数据结构--线性表链式存储(链表)--单链表
定义: 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素. 链表中的数据是以节点来表示的,每个结点的构成:元素( 数据元素的映象) + 指针(指示后继元素存储位置),元素 ...
- 大话数据结构02 :线性表链式存储 C++
1.链表插入和删除等操作 关键是要找到插入元素的前一个元素 Status ListInsert(LinkList L, int i, ElemType e) {LinkList N = new Nod ...
- [一] 详细讲解: 线性表链式存储结构 中的 单链表; (数据结构和算法)
一.定义 二.单链表
- 数据结构C语言实现系列——线性表(线性表链接存储(单链表))
#include <stdio.h> #include <stdlib.h> #define NN 12 #define MM 20 typedef int elemType ...
最新文章
- IPhoneX网页布局简介
- @data注解的作用_Java中注解学习系列教程-2
- SDUT OJ -2892 A
- 好代码是管出来的——C#的代码规范
- 前端学习(2620):新增品牌
- 机器学习11/100天-KNN实践
- C++ 常量类型 const 详解
- 剑指offer面试题[8]-旋转数组的最小数字
- DQL——数据查询语言
- java线程池原理简答_面试官让我讲讲Java线程池的实现原理,我笑了...
- 用prototype 定义自己的方法
- Electron 应用实战 (架构篇)
- matlabadftest_adf检验matlab程序
- actviti 工作流核心技术和实战-学习笔记(一)什么是工作流
- 游戏是怎么赚钱的 - 科普篇
- 如何处理图片放大后变模糊的情况?
- java生成二维码QRcode方式
- python爬app西瓜视频_python3 scrapy抓取今日头条视频(西瓜视频)
- apache ii评分怎么评_APACHEII评分说明
- python爬虫(爬取王者荣耀英雄图片)
热门文章
- BZOJ 1833: [ZJOI2010]count 数字计数
- 不会日语也能在日本点菜 | 通用篇
- HTTP, WWW-Authenticate, Authorization 验证授权 | Apache验证 | Python处理
- 没事不要在for循环期间增减迭代序列的成员
- 学习笔记:Oracle的trace文件可见性
- 高并发高流量网站架构[转]
- Oracle 10g dbms_rowid 包源码
- 记录几种常用编码方式:BASE64、MD5
- 关于类类型的隐式类型转换
- VS2017设置C++标准