当前位置: 首页 > news >正文

02.顺序表、链表简述+对比

目录

一、线性表

二、顺序表

三、链表

四、顺序表和链表的区别


一、线性表

        线性表(linear list)是n个具有相同特性的数据元素的有限序列(相同特性指都为整型int、字符型char或其它类型)。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串...

        线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。

 二、顺序表

1).顺序表概念及结构

        顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储,在数组上完成数据的增删改查。一般见到的顺序表都是在结构体中定义的数组,只是比普通数组多了增删改查等一些其他功能函数。

顺序表一般可以分为:

        ①. 静态顺序表:使用定长数组存储元素。(即数组大小一旦确定就不能改变)。可能导致有时空间开大了,造成空间浪费;或者空间开小了,空间不够用。

#define N 7
typedef int SLDataType;
typedef int SeqList
{SLDataType a[N];	//定长数组,N的值一开始就确定了size_t size;
}SeqList;

        ②. 动态顺序表:使用realloc动态开辟的数组存储,数组大小可以改变,每次增容2倍。


typedef int SLDataType
typedef struct SeqList
{SLDataType* a;		//指向动态开辟的数组size_t size;		//有效数据个数size_t capicity;	//容量空间的大小
}SeqList;

2).动态顺序表接口:(接口实现见下一篇博客)

//顺序表初始化
//检查空间,如果满了,进行增容
//顺序表尾插
//顺序表头插
//顺序表尾删
//顺序表头删
//顺序表查找
//顺序表在指定位置插入
//顺序表删除指定位置的值
//顺序表的销毁
//顺序表的打印

三、链表

1)链表的概念及结构

        数据元素是由指针链接实现的。每次增加数据都要申请空间。

typedef int SLTDateType
typedef struct SListNode
{SLTDateType data;          //存储数据struct SListNode* next;    //next指针,指向下一个数据节点
}SListNode;

链表的结构如下,每个head为链表的头节点(头节点可有可无),是一个指针指向链表的第一个元素,每个链表节点中的next指针指向下一个节点的地址,每个节点通过上一个节点的next指针链接。

2).链表的分类

        ①.单向或者双向,双向链表中有两个指针,一个指向前一个节点的地址,一个指向后一个节点的地址。

        ②.带有节点,或者不带头节点 。

        ③.循环或者非循环。

                循环:最后一个节点的next指向第一个节点。

                非循环:最后一个节点的next指向NULL。

3).链表的实现(单链表)(具体实现见下下篇博客)

typedef int SLTDateType
typedef struct SListNode
{SLTDateType data;          //存储数据struct SListNode* next;    //next指针,指向下一个数据节点
}SListNode;//动态申请一个节点
//单链表打印
//单链表尾插
//单链表头插
//单链表尾删
//单链表头删
//单链表查找
//单链表在指定位置之后插入
//单链表在指定位置之后删除

四、顺序表和链表的区别

不同点顺序表链表
存储空间上物理上一定连续逻辑上连续,但物理上不一定连续
随机访问支持O(1)不支持:O(N)
任意位置插入或者删除元素可能需要搬移元素,效率低O(N)只需修改指针指向
插入动态顺序表,空间不够时需要扩容没有容量的概念
应用场景元素高效存储+频繁访问任意位置插入和删除频繁
缓存利用率

http://www.lryc.cn/news/460724.html

相关文章:

  • 前端布局与响应式设计综合指南(三)
  • 当今SNARKs全景
  • PMP敏捷专题课:敏捷原则与理念
  • 有两个水桶,容量分别为5升和3升,请问如何使用这两个桶得到4升的水?
  • pytorch_lightning笔记
  • 从零开始了解云WAF,您的网站安全升级指南
  • Python脚本爬取目标网站上的所有链接
  • Linux下以编译源码的方式安装Qt5与Qt6及其使用
  • 替换掉js后重启nginx 页面加载后js还是原来的 解决方法.【js版本号】【js不生效】【js失效】
  • SHELL脚本之输出语句的使用
  • 《大规模语言模型从理论到实践》第一轮学习--Fine-tuning微调
  • XGBoost回归预测 | MATLAB实现XGBoost极限梯度提升树多输入单输出
  • 【翻译】在 Python 应用程序中使用Qt Designer的UI文件
  • 002-Html
  • 微知-Mellanox提供的一个不错的测试rdma_cm方式建链的工具软件ucmatose?(ucmatose; ucmatose -s 1.1.1.1)
  • Vivado HLS C/RTL 联合仿真时间
  • Python实现图像加密与解密工具
  • 《RabbitMQ篇》消费者轮询消费消息
  • mongodb导入导出
  • 判断 HTTP/2 多路复用是否在服务器上实现
  • (已解决)vscode使用launch.json进行debug调试报错:Couldn‘t spawn debuggee:embedded null byte
  • windows桌面便签小工具,便签软件哪个好用?
  • 【Linux】C文件头文件数裁剪前58644个,裁剪后9373个
  • 线性自抗扰控制(LADRC)系统算法框图
  • 基于SSM的微信小程序博客管理系统(博客1)
  • text-behind-image:轻松创建文字背景图片设计
  • 前端reactvue3——实现滚动到底加载数据
  • qt 安装提示 无法定位程序输入点 systemparametersinfofordpi于动态链接库
  • 算法笔记day04
  • 实战篇:(四)Vue2 + Three.js 创建可交互的360度全景视图,可控制旋转、缩放完整代码