首页 > 其他分享 >02.数据结构介绍&顺序表、链表简述+对比

02.数据结构介绍&顺序表、链表简述+对比

时间:2024-10-19 10:17:17浏览次数:8  
标签:02 typedef 单链 next 链表 顺序 数据结构 节点

目录

一、什么是数据结构

二、线性表

三、顺序表

四、链表

五、顺序表和链表的区


一、什么是数据结构

   

        数据结构是由“数据”和“结构”两个词组合而来。

        数据:常见的数值1、2、3......,网页里的文字图片信息等都是数据。

        结构:组织数据的方式。例如对数据的增删改查等方法。

        总结:1)能够存储数据(如顺序表,链表等结构)

                   2)存储的数据能够方便进行增删改查等操作。

二、线性表

        线性表(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)只需修改指针指向
插入动态顺序表,空间不够时需要扩容没有容量的概念
应用场景元素高效存储+频繁访问任意位置插入和删除频繁
缓存利用率

标签:02,typedef,单链,next,链表,顺序,数据结构,节点
From: https://blog.csdn.net/qq_54652195/article/details/142942354

相关文章

  • 【数据结构】分治算法经典: 快速排序详解
    快速排序(Quicksort)是一种高效的排序算法,最早由TonyHoare在1960年提出。它采用了分治(DivideandConquer)策略,平均时间复杂度为O(nlog......
  • 顶会论文下载合集(ECCV 2024全)
    2024CV2024综述(持续更新中)链接:https://pan.baidu.com/s/16yglfB7YtkDDWFQPC3u9xQ提取码:52CVECCV2024论文全链接:https://pan.baidu.com/s/1YUVUqmIP3Y_DIxg4w1OYwg提取码:52CVCVPR2024论文全链接:https://pan.baidu.com/s/15-RZjmXoTxZtyS7NMxV4CQ提取......
  • 【2024最新版】Win10下 Java环境变量配置----适合入门小白
    首先,你应该已经安装了Java的JDK了(如果没有安装JDK,请跳转到此网址:http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html)笔者安装的是jdk-8u91-windows-x64接下来主要讲怎么配置Java的环境变量,也是为了以后哪天自己忘记了做个备份(注:win10的......
  • 2024.10.18 2342版
    起于《海奥华预言》的思考◆地球管理结构和参考持续更新中...... 英文地址:https://github.com/zhuyongzhe/Earth/tags中文地址:https://www.cnblogs.com/zhuyongzhe85作者:朱永哲 ---------------------------------------------------------------------------------......
  • <<程序员修炼之道-从小工到专家>> -2024/10/18
    读了程序员修炼之道-从小工到专家第二版虽然还没读完,但我已经感受到这本书的魅力所在,在书的评价中,有一些有名的程序员都将这本书称为自己的成功之书,并在一段时间都要看一次,书中序言一直强调,这本书不会告诉你编程应该是怎么样的,它并没有使用那种哲学或审判的方式告诉你,......
  • 20222426 2024-2025-1 《网络与系统攻防技术》实验二实验报告
    202224262024-2025-1《网络与系统攻防技术》实验二实验报告1.实验内容(1)例举你能想到的一个后门进入到你系统中的可能方式?后门进入系统中的一种可能方式是通过下载并安装带有后门程序的恶意软件。这些恶意软件可能伪装成合法的软件或工具,诱骗用户下载并安装。一旦安装,后门程......
  • 2024-10-18
    背景属性颜色设置元素的背景图像设置如何平铺背景size属性设置背景大小设置默认背景的显示位置......
  • 2024.10.18 2309版
    起于《海奥华预言》的思考◆地球管理结构和参考持续更新中...... 英文地址:https://github.com/zhuyongzhe/Earth/tags中文地址:https://www.cnblogs.com/zhuyongzhe85作者:朱永哲 ---------------------------------------------------------------------------------......
  • 20222306 2024-2025-1 《网络与系统攻防技术》实验二实验报告
    1.实验内容1.1实践目标(1)使用netcat获取主机操作Shell,cron启动某项任务(任务自定)PS:cron是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程(2)使用socat获取主机操作Shell,任务计划启动(3)使用MSFmeterpreter(或其他软件)生成可执行文件,利用ncat或socat传......
  • 2024/10/18日 日志 --》关于MySQL中的 事务 以及JDBC的初步学习笔记与整理
    今天学习练习了事务的相关内容,并正式向连接数据库走近,进入到JDBC的学习。点击查看代码--事务--概念简介:是一种机制,一个操作序列,包含了一组数据库操作命令。-- 事务把所有的命令作为一个整体一起向系统提交或撤销操作请求,--即这一组数据库命令要么同时成功,要么同时失......