Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >数据结构基础——线性表

数据结构基础——线性表

作者头像
小颜同学
发布于 2023-08-21 06:02:44
发布于 2023-08-21 06:02:44
2470
举报
文章被收录于专栏:原创笔记原创笔记

前言: 数据结构的概念:数据结构是指数据对象机器相互关系的构造方法。

数据结构S可以用一个二元组表示:S=(D,R)

D是数据结构中的数据的非空有限集合,R是定义在D上的关系的非空有限集合。

数据的存储结构:在数据结构中,结点及结点间的相互关系称为数据的逻辑结构。

数据结构可以按照逻辑结构的不同分为两大类:线性结构和非线性结构。其中非线性结构又可分为树形结构和图结构,而树形结构又可以分为树结构和二叉树结构。

1、常用数据结构

数组(静态数组、动态数组)、线性表、链表(单向链表、双向链表、循环链表)、队列、栈、树(二叉树、查找树、平衡树、线索树、堆)、图等的定义、存储和操作。Hash(存储地址计算,冲突处理)。

2、常用算法:

排序算法、查找算法、数值计算方法、字符串处理方法、数据压缩算法、递归算法、图的相关算法。算法与数据结构的关系、算法效率、算法设计、算法描述(流程图、伪代码、决策表)、算法的复杂性。

1.线性表的概念

线性表是最简单、最常用的一种数据结构,它是由相同类型的节点组成的有限序列

一个由n个结点a0,a1,…,an–1组成的线性表可记为(a0,a1,…,an–1)。

线性表的结点个数为线性表的长度, 长度为0的线性表称为空表

对于非空线性表,a0是线性表的第一个结点,an–1是线性表的最后一个结点。

线性表的结点构成一个序列,对序列中两相邻结点ai和ai+1,称ai是ai+1的前驱结点,ai+1是ai的后继结点。其中a0没有前驱结点,an–1没有后继结点。

线性表中结点之间的关系可由结点在线性表中的位置确定,通常用(ai,ai+1)(0≤i≤n–2)表示两个结点之间的先后关系。例如,如果两个线性表有相同的数据结点,但它们的结点在线性表中出现的顺序不同,则它们是两个不同的线性表。

线性表的结点可由若干成分组成,其中能唯一标识该结点的成分称为关键字,或简称键。

2.线性表的基本运算

线性表包含的结点个数可以动态增加或减少,可以在任何位置插入或删除结点。线性表常用的运算可分成几类,每类有若干种运算。

1)查找运算

在线性表中查找具有给定键值的结点。

2)插入运算

在线性表的第i(0≤i≤n–1)个结点的前面或后面插入一个新结点。

3)删除运算

删除线性表的第i(0≤i≤n–1)个结点。

4)其他运算

统计线性表中结点的个数;

输出线性表各结点的值;

复制线性表;

线性表分拆;

线性表合并;

线性表排序;

按某种规则整理线性表。

3.线性表的存储

线性表常用的存储方式有顺序存储链接存储

1)顺序存储

顺序存储是最简单的存储方式,通常用一个数组,从数组的第一个元素开始,将线性表的结点依次存储在数组中,即线性表的第i个结点存储在数组的第i(0≤i≤n–1)个元素中,用数组元素的顺序存储来体现线性表中结点的先后次序关系。

优点

能随机存储线性表中的任何一个结点。

缺点

1.数组的大小通常是固定的,不利于任意增加或减少线性表的结点个数

2.插入和删除线性表的结点时,要移动数组的其他元素,操作复杂。

2)链接存储

链接存储是用链表存储线性表(链表),最简单的是用单向链表,即从链表的第一个结点开始,将线性表的结点依次存储在链表的各结点中。链表的每个结点不但要存储线性表结点的信息,还要用一个域存储其后继结点的指针。单向链表通过链接指针来体现线性表中结点的先后次序关系。

优点

1.线性表每个结点的实际存储位置是任意的。

2.只要改变链表有关结点的后继指针就能完成插入或删除的操作,不需移动任何表单元。

缺点

1.每个结点增加了一个后继指针成分,要花费更多的存储空间。

2.不便随机访问线性表的任一结点。

4.线性表上的查找

线性表上的查找运算是指在线性表中找某个键值的结点。

根据线性表中的存储形式和线性表本身的性质差异,有多种查找算法,例如顺序查找、二分法查找、分块查找、散列查找等。其中二分法查找要求线性表是一个有序序列。

5.在线性表中插入新结点

1)顺序存储

设线性表结点的类型为整型,插入之前有n个结点,把值为x的新结点插在线性表的第i(0≤i≤n)个位置上。

完成插入主要有以下步骤:

1.检查插入要求的有关参数的合理性;

2.把原来的第n–1个结点至第i个结点依次往后移一个数组元素位置;

3.把新结点放在第i个位置上;

4.修正线性表的结点个数。

5.在具有n个结点的线性表上插入新结点,其时间主要花费在移动结点的循环上。若插入任一位置的概率相等,则在顺序存储线性表中插入一个新结点,平均移动次数为n/2

2)链接存储

在链接存储线性表中插入一个键值为x的新结点,分为以下4种情况:

1.在某指针p所指结点之后插入;

2.插在首结点之前,使待插入结点成为新的首结点;

3.接在线性表的末尾;

4.在有序链表中插入,使新的线性表仍然有序。

6.删除线性表的结点

1)顺序存储

在有n个结点的线性表中,删除第i(0≤i≤n–1)个结点。删除时应将第i+1个结点至第n–1个结点依次向前移一个数组元素位置,共移动n–i–1个结点。完成删除主要有以下几个步骤:

1.检查删除要求的有关参数的合理性;

2.把原来第i+1个表元至第n–1个结点依次向前移一个数组元素位置;修正线性表表元个数。

3.在具有n个结点的线性表上删除结点,其时间主要花费在移动表元的循环上。若删除任一表元的概率相等,则在顺序存储线性表中删除一个结点,平均移动次数为(n-1)/2.

2)链接存储

对于链表上删除指定的结点的删除运算,需要考虑几种情况:

1.链表为空链表,不执行删除操作;

2.要删除的结点恰为链表的首结点,应将链表头指针改为指向原首结点的后继指点;

3.其他情况,先要在链表中寻找要删除的结点,从链表首结点开始顺序寻找。若找到,执行删除操作,若直至链表末尾没有指定值的结点,则不执行删除操作。

完成删除由以下几个步骤组成:

如链表为空链表,则不执行删除操作;

若链表的首结点的值为指定值,更改链表的头指针为指向首结点的后继结点;

在链表中寻找指定值的结点;

将找到的结点删除。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-09-05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
数据结构与算法之线性表前言线性表
前言 上一篇《数据结构和算法之时间复杂度和空间复杂度》中介绍了时间复杂度的概念和常见的时间复杂度,并分别举例子进行了一一说明。这一篇主要介绍线性表。 线性表属于数据结构中逻辑结构中的线性结构。回忆一下,数据结构分为物理结构和逻辑结构,逻辑结构分为线性结构、几何结构、树形结构和图形结构四大结构。其中,线性表就属于线性结构。剩余的三大逻辑结构今后会一一介绍。 线性表 基本概念 线性表(List):由零个或多个数据元素组成的有限序列。 注意: 1.线性表是一个序列。 2.0个元素构成的线性表是空表。 3
VV木公子
2018/06/05
7.7K0
数据结构与算法 -线性表
线性表中只有一个起始结点,一个终端结点, 起始结点没有直接前驱,有一个直接后继。 终端结点有一个直接前驱,没有直接后继。 除此二结点外,每个结点都有且只有一个直接前驱 和一个直接后继。
越陌度阡
2020/11/26
3360
数据结构与算法 -线性表
数据结构——线性表(1)
  今天复习数据结构中最常用和最简单的一种结构,线性表。   线性表,从名字上你就能感觉到,是具有像线一样的性质的表。在广场上,有很多人分散在各处,当中有些是小朋友,可也有很多大人,甚至还有不少宠物,这些小朋友的数据对于整个广场人群来说,不能算是线性表的结构。但像刚才提到的那样,一个班级的小朋友,一个跟着一个排着队,有一个打头,有一个收尾,当中的小朋友每一个都知道他前面一个是谁,他后面一个是谁,这样如同有一根线把他们串联起来了。就可以称之为线性表。
向着百万年薪努力的小赵
2022/12/02
4710
数据结构——线性表(1)
线性表(Linear List) 原
线性表是我们日常工作中最简单也是最常用的一种数据结构。 它有如下特点: 每个数据元素最多只能有一个直接前趋。 每个数据元素最多只能有一个直接后继。 只有第一个数据元素没有直接前趋。 只有最后一个数据元素没有直接后继。
云飞扬
2019/03/13
7080
线性表(Linear List)
                                                                            原
疯狂java笔记之线性表
从数据的逻辑结构来分,数据元素之间存在的关联关系被称为数据的逻辑结构。归纳起来,应用程序中的数据大致哟如下四种基本的逻辑结构。
HelloJack
2018/08/28
6280
疯狂java笔记之线性表
线性表简介
学习数据结构 -> 线性表 -> 线性表的介绍     线性表是一种典型的数据结构, 线性结构的基本特点是线性表中的数据元素是有序且有限的, 在线性结构中, 有且仅有一个被称为"开始数据元素"和一个"最后数据元素", 除了开始数据元素没有直接前驱, 最后一个数据元素没有直接后继外, 其余的数据元素有且仅有唯一的一个直接前驱和直接后继。     整理下来说, 线性表具有如下基本特征:         1>. 线性结构中必然存在唯一一个"开始数据元素" ;         2>. 线性结构中必然存
猿人谷
2018/01/17
7040
线性表简介
数据结构与算法(二)-线性表之单链表顺序存储和链式存储
前言:前面已经介绍过数据结构和算法的基本概念,下面就开始总结一下数据结构中逻辑结构下的分支——线性结构线性表
2018/09/26
1.4K0
数据结构与算法(二)-线性表之单链表顺序存储和链式存储
【数据结构】线性表
文章目录 2. 线性表 2.1 概述 2.2 顺序表 2.2.1 定义 2.2.2 地址公式 2.2.3 顺序表特点 2.2.4 算法:插入 2.2.5 算法:删除 2.2.6 算法:查找 2.2.7 顺序表局限性: 2.3 单链表 2.3.1 定义 2.3.2 术语 2.3.3 类定义 2.3.4 算法:单链表的长度【重点】 2.3.5 算法:按索引号(位序号)查找【重点】 2.3.6 算法:按值查找索引号【重点】 2.3.7 算法:插入 2.3.8 算法:删除 2.3.9 算法:获得前驱 2.4 循环链
陶然同学
2023/02/26
4730
【数据结构】线性表
数据结构与算法系列2 线性表
** 线性表是具有n个相同类型元素的有序序列,线性表是最基本、最简单、也是最常用的一种数据结构。线性表(linear list)是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列。线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的(注意,这句话只适用大部分线性表,而不是全部。比如,循环链表逻辑层次上也是一种线性表(存储层次上属于链式存储,但是把最后一个数据元素的尾指针指向了首位结点)。
一只胡说八道的猴子
2020/09/27
4070
数据结构与算法系列2 线性表
java实现数据结构
一.数据结构和算法简介 数据结构是指数据在计算机存储空间中的安排方式,而算法时值软件程序用来操作这些结构中的数据的过程. 二. 数据结构和算法的重要性 几乎所有的程序都会使用到数据结构和算法,即便是最简单的程序也不例外.比如,你希望打印出学生的名单,这个程序使用一个数组来存储学生名单,然后使用一个简单的 for循环来遍历数组,最后打印出每个学生的信息. 在这个例子中数组就是一个数据结构,而使用for循环来遍历数组,则是一个简单的算法.可见数据结构和算法是构成程序的灵魂所在,而且也有人提出数据结构+算法=程序. 简单算法
海仔
2019/08/06
1K0
数据结构学习笔记——线性表(中)
线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素,这组存储单元可以是连续的,也可以是不连续的。这就意味着,这些数据元素可以存在内存未被占用的任意位置。
蜻蜓队长
2018/08/03
4230
数据结构学习笔记——线性表(中)
【图解数据结构】 线性表
1.线性表的定义 若将线性表记为(a1,...,ai-1,ai,ai+1,...,an),则表中ai-1领先于ai,ai领先于ai+1,称ai-1是ai的直接前驱元素,ai+1是ai的直接后继元素。
撸码那些事
2018/06/21
1.3K5
数据结构学习笔记(线性表)
  1.基础概念:   *数据((数据对象(数据元素(数据项)))------包含关系。    *数据结构是互相之间存在一种或多种特定关系的数据元素的集合。   *逻辑结构:集合机构,线性结构,树形结构,图形结构。   *物理结构:顺序储存结果、链接储存结构。   2.算法效率问题:   *判断一个算法的效率时,函数中的常熟和其他次要项常常可以忽略,而更应该关注主项(最高次项)的阶数。 最高次项的指数大的,函数随着n的增长,结果也会变得增长特别快。   *常数项:不管这个常数是多少,我们都计作O(1)。
希希里之海
2018/05/16
7760
重学数据结构(一、线性表)
线性表是最常见也是最简单的一种数据结构。简言之, 线性表是n个数据元素的有限序列。 其一般描述为:
三分恶
2020/08/21
7560
重学数据结构(一、线性表)
期末复习之数据结构 第2章 线性表
#include <iostream> using namespace std; #define ElemType int #define Status int #define MAXSIZE 100 typedef struct LNode { ElemType data;//数据域 struct LNode* next;//指针域 }LNode, * LinkList; Status InitList(LinkList& L) { L = new LNode; L->next = NULL; return 1; } Status InsertList(LinkList& L, int pos, ElemType e) { LNode* s; LinkList p = L; int j = 0; while (p&&(j<pos-1)) { p = p->next; ++j; } if (!p || j > pos - 1) { return 0; } s = new LNode; s->data = e; s->next = p->next; p->next = s; return 1; } int main() { LinkList P; InitList(P); int num; cout << "请输入整数,按ctrl+z结束输入" << endl; int Length = 1; while (cin>>num) { Length++; InsertList(P, Length, num); } cout <<"单链表结点个数为:"<< Length-1 << endl; }
henu_Newxc03
2021/12/28
7220
期末复习之数据结构 第2章 线性表
数据结构—线性表
本篇开始,又会开始一个新的系列,数据结构,数据结构在算法或者是编程中的重要性不言而喻,所以学好数据结构还是很有必要的。本篇主要介绍数据结构的第一个结构——线性表,主要分为以下几部分: 1.概念 2.存储结构
张俊红
2018/07/30
7210
数据结构—线性表
【数据结构(C语言版)系列一】 线性表
数据是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。
闪电gogogo
2018/10/10
2.3K1
【数据结构(C语言版)系列一】 线性表
数据结构之线性表
所谓顺序表就是顺序存储的线性表。顺序存储是用一组地址连续的存储单元依次存放线性表中各个元素的存储结构。
C语言与CPP编程
2020/12/02
8790
数据结构之线性表
数据结构之数组和链表的区别
所谓数组,就是相同数据类型的元素按一定顺序排列的集合;数组的存储区间是连续的,占用内存比较大,故空间复杂的很大。但数组的二分查找时间复杂度小,都是O(1);数组的特点是:查询简单,增加和删除困难;
全栈程序员站长
2022/09/07
2.1K0
数据结构之数组和链表的区别
线性表
线性表的顺序存储指的是将线性表的数据元素按其逻辑次序依次存入一组地址连续的存储单元里,用这种方法存储的线性表称为顺序表。
ianzhi
2019/07/31
3450
相关推荐
数据结构与算法之线性表前言线性表
更多 >
LV.1
北京睿思鸣信息技术有限公司Java开发工程师
作者相关精选
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档