首页 > 其他分享 >02线性表

02线性表

时间:2024-06-24 12:10:02浏览次数:3  
标签:02 顺序 线性表 元素 链表 节点 指针

线性表

线性表是一种逻辑结构,是抽象概念;顺序表、链表是存储结构,两者是不同层次的概念

线性表由数据元素组成,数据元素由数据项组成
线性表的位序从1开始

线性表的基本操作

void InitList(&L); //初始化
int Lenth(L); //获得表长
int LocateElem(L,e); //按值查找操作
ElemType GetElem(L,i); //按位查找操作
bool ListInsert(&L,i,e); //插入操作
bool ListDelete(&L,i,&e); //删除操作
void PrintList(L); //输出操作
bool Empty(L); //判空操作
void DestroyList(&L); //销毁操作

顺序表

顺序表是一种随机存取的存储结构

链表

链表是一种顺序存取的存储结构

链表内的元素值进行互换,一般视为两个节点断链后互换,而不是元素直接赋值。

双链表

双链表每个节点均有两个指针,头节点只有后继节点,前驱节点为NULL;最后节点只有前驱节点,后继节点为NULL。

循环单链表

表尾元素:该节点的NEXT指针是否指向头节点

空表判定:头指针的NEXT指针是否指向头节点自己

循环双链表

在循环单链表基础上,头节点的PRIOR指针指向表尾最后节点

静态链表

静态链表中的元素也包含数据域data以及指针域next,此时的指针与next指向的是下一个元素存放的下标。

0号节点充当头节点,当静态链表已满时指针域next设为-1.表示已到达表尾。

将静态链表作为数组去访问

#define MAXSIZE 10
typedef struct Node{
    Element data;
    int next;
};

void main{
    struct Node S[MAXSIZE];
}

将静态链表作为独立的数据结构去访问

#define MAXSIZE 10
typedef struct Node{
    Element data;
    int next;
}SLinkList[MAXSIZE];

void main{
    SLinkList S;
}

本质上,上下两种等价,但是后者让开发者可以不关注其存储结构,只关注其逻辑结构线性表本身,因此静态链表也不允许随机存取。

顺序表与链表对比

逻辑结构

顺序表和链表均为线性表,均为线性结构,一对一的关系

存储结构

顺序表

  • 优点:可以随机存取,存储密度高
  • 缺点:连续空间的分配不方便,改变容量不方便

链表:

  • 优点:离散空间分配容易,改变容量容易
  • 缺点:无法随机存取,存储密度低

基本操作

创建初始化:

顺序表需要预先分配大片连续空间。空间过大会浪费空间,空间过小扩展容量不方便

链表只需要预先分配头节点(或只声明头指针),改变容量随时扩展

销毁

对于静态分配所申请的空间,线性表生命周期结束自动回收。

对于动态分配,使用malloc所申请的空间均存储在栈堆中,需要手动free释放空间,即malloc和free成对出现,顺序表、链表是一样的。

插入、删除

顺序表插入/删除操作需要将后续元素后移/前移产生开销,如果超出容量还需要扩展。
时间复杂度为O(n),开销主要在移动元素上

链表插入/删除操作只需要修改指针域即可。
时间复杂度也为O(n),开销主要在查找元素上,相比移动元素高额的代价,查找所花费的开销一般更小

查找

顺序表按位查找只需要O(1),按值查找最坏需要O(n),如果顺序表内元素有序,可以在O(log2n)内找到

链表不论是按位还是按值(不论是否有序)均需要O(n)

使用场景

链表: 表长不可预估,需要频繁增删元素
顺序表:表长可预估,需要频繁查找元素

开放问题答题思路:
1.两种数据结构的逻辑结构差异
2.两种数据结构的存储结构差异
3.两种数据结构的基本操作上实现效率的差异

标签:02,顺序,线性表,元素,链表,节点,指针
From: https://www.cnblogs.com/GKJerry/p/18264780

相关文章

  • 纯真IP库查询方法(2024-6-19更新qqwry.dat后无法查询,修改代码)
    2024-6-19更新qqwry.dat后使用pthon38那篇文章里的代码无法查询,使用pythom2的代码,修改之后python3可用,将文件放到工程里查询,不用Lib库里的。修改后的qqwry.py如下,python3可用。coding=utf-8forPython2.7为https://pypi.python.org/pypi/qqwry-py3的Python2版版本:2017-10-......
  • XAMPP Windows PHP-CGI 代码执行漏洞(CVE-2024-4577) | Goby漏洞预警
    漏洞描述:PHP是一种在服务器端执行的脚本语言,在PHP的8.3.8版本之前存在命令执行漏洞,由于Windows的“Best-FitMapping”特性,在处理查询字符串时,非ASCII字符可能被错误地映射为破折号(-),导致命令行参数解析错误,当php_cgi运行在Windows平台上,且代码页为繁体中文、简......
  • 2024年商业管理与金融创新国际会议(BMFI 2024)
    2024年商业管理与金融创新国际会议(BMFI2024)2024InternationalConferenceonBusinessManagementandFinancialInnovation【重要信息】大会地点:上海大会官网:http://www.icbmfi.com投稿邮箱:[email protected]【注意:将稿件Word+PDF上传至邮箱,邮件正文请备注“BMFI......
  • 华为在 2024 年 6 月 21 日的华为开发者大会上,华为终端 BG 软件部总裁龚体正式官宣了
    华为在2024年6月21日的华为开发者大会上,华为终端BG软件部总裁龚体正式官宣了华为自研仓颉编程语言,并发布了HarmonyOSNEXT仓颉语言开发者预览版。仓颉编程语言文件后缀名为.cj,以下是第一个入门代码输出:你好,仓颉。仓颉编程语言的名字来自“仓颉造字”。仓......
  • 常上来看看-20240624
    【今天又是什么日子】今天是2024年6月24日,一个普通的周一或者也可以有另外的说法,今天是老婆去深圳后的第一个工作日今天有一些地方开始出高考成绩了【上次来是什么时候】上次来刚好是高考的时候,真是巧了【为啥突然记得来了】因为有些计划要变了【之前想干啥,还记得吗】之......
  • [图解]企业应用架构模式2024新译本讲解17-活动记录1
    100:00:01,070-->00:00:04,180下一个我们要说的就是200:00:04,190-->00:00:06,740活动记录模式了300:00:07,640-->00:00:11,210同样是数据源架构模式400:00:12,300-->00:00:18,480里面的一个,活动记录500:00:18,490-->00:00:21,710我们看这里,定义,active......
  • 【2024-06-12】自我烦恼
    20:00现在我们做中国人要顶勇敢,什么都不怕,什么都顶有决心才好。                                                 ——林徽因昨天一整天,心思都不在工作,打开手机,插着充......
  • 【2024-06-13】端午叙事
    20:00让我们天亮就起,按时吃早餐,心平气和而又心中坦然,任人来人往,任钟鸣孩子闹一下定决心好好地过一天。我们为什么要被击垮甚至自甘堕落呢?                                           ......
  • 2024年语言艺术与社会科学国际会议(ICLASS 2024)
    2024InternationalConferenceonLanguageArtsandSocialSciences【1】大会信息会议简称:ICLASS 2024大会时间:2024-07-30大会地点:中国·重庆截稿时间:2024-07-16(以官网为准)审稿通知:投稿后2-3日内通知会议官网:www.lassiac.com投稿邮箱:[email protected]【2......
  • 2024/06/24笔记随笔
    网格布局创建简易计算器publicclassCalculatorDemoextendsApplication{privatedoublenumber1=0;privateStringoperator="";privatebooleanstart=true;@Overridepublicvoidstart(Stagestage)throwsException{stage.......