ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

数据结构

2022-08-11 01:32:06  阅读:188  来源: 互联网

标签:存储 线性表 队列 next 数据结构 节点 指针


一. 概述

数据结构是相互之间存在一种或多种特定关系的数据元素集合
主要包括三个方面:逻辑结构、存储结构和数据的运算
算法的设计取决于逻辑结构,而其实现依赖于存储结构
逻辑结构

  • 线性结构:线性表
  • 非线性结构:集合、树、图

存储结构

  • 顺序存储:逻辑上相邻的元素,物理位置上也相邻,存储单位地址连续
  • 链式存储:借助元素存储地址的指针来表示逻辑关系,不要求物理上相邻
  • 索引存储:存储元素信息同时建立索引表,索引表每项称为索引项,方便快速检索,缺点是占用额外空间
  • 散列存储:根据关键字直接计算出存储地址,又称哈希存储

二. 线性表

1. 线性表的定义和基本操作

线性表是具有相同数据类型的n个数据元素的有限序列
除第一个元素外,有且只有一个直接前驱,除最后一个元素外,有且只有一个后继
基本操作:初始化、增删改查、返回表长、回收线性表

2. 线性表的顺序表示

顺序存储的线性表称为顺序表,用一组地址连续的存储空间一次存储线性表中元素
顺序表的特点是逻辑顺序和物理顺序相同,可以根据地址的相对位置直接访问,实现随机存储
插入、删除、查找的时间复杂度均为O(n)
顺序表应用题

3. 线性表的链式表示

3.1. 单链表

线性表的链式存储又称单链表,通过一组任意的存储单元来存储线性表中元素
每个链表节点,除存放元素自身信息,还存放一个指向后继的指针,查找特定节点时,需要从表头开始遍历
为了操作上的方便,一般使用一个头结点,其指针指向线性表第一个元素
(这样既统一了第一个位置和其他位置的操作,又统一了空表和非空表的操作)
头插法:将节点插到最前端,得到链表顺序与插入顺序相反
尾插法:记录尾指针,从最后端插入,并更新尾指针,注意最后尾指针悬空
其他操作有按序号查找、按值查找、插入到指定位置、删除节点、求表长
拓展:前插操作和删除节点操作可以通过交换数据域来灵活实现

3.2 双链表

双链表节点中存在两个指针,分别指向前驱和后继

//p节点后插入s
s->next = p->next;
p->next->prior = s;
s->prior = p;
p->next = s;
//p节点后删除q
p->next = q->next'
q->next->prior = p;
free(q);
3.3 循环单链表、循环双链表、静态链表

循环单链表判空条件为头结点的指针是否等于头指针,有时不设头指针而仅设尾指针
循环双链表与单链表不同在于其头结点的前驱还要指向尾节点,为空表时,头结点的前驱和后继都为自己
静态链表借助数组来描述链式存储,节点也有数据域和指针域,其指针域存储节点的相对地址(游标),以next==-1作为结束的标志
链表应用题

三. 栈和队列

1. 栈

栈是只允许在一端进行插入或删除的线性表,$ n个不同元素入栈,出栈的排列有\frac{1}{n+1}C^{n}_{2n} $
采用顺序存储的栈称为顺序栈,采用连续存储单元存放自栈底到栈顶的数据
栈空条件:s.top==-1,栈满条件:s.top = MaxSize-1
此时入栈操作先移动指针,再存放数据,出栈操作先出数据,再移动指针

  • 共享栈:top0=-1时0号栈空,top1=MaxSize时1号栈空,top1-top0==1时栈满
  • 链栈:便于共享空间,不存在栈满情况,所有操作在表头进行

2. 队列

队列只允许在队尾一段插入,另一端队头删除

2.1 顺序存储

队列的顺序实现同样是分配一块连续的存储单元,附设两个指针
初始q.front=0、q.rear=0
循环队列:可以看出q.rear==Maxsize时队列并不一定满,可以通过取余操作将数组假定成环状空间
出队:q.front=(q.front+1)%MaxSize
入队: q.rear=(q.rear+1)%MaxSize
判断队空队满有三种方式

  • 牺牲一个单元:(q.rear+1)%MaxSize == q.front队满,q.rear = q.front队空
  • 记录元素个数:q.size=0和q.size=MaxSize
  • 新增tag标志:若因删除操作导致两指针相等,则队空,因插入导致相等,则队满
2.2 链式存储和双端队列

队列的链式存储实际上是一个带有队头指针和队尾指针的单链表
使用头结点进行插入和删除的统一操作,当删除节点为尾结点时,置空,其余操作和单链表一致
双端队列指允许在两端进行入队和出队的队列,除此之外还有
输入受限的的双端队列:另一端只允许删除
输出受限的双端队列:另一端只允许插入

2.3 矩阵压缩

二维数组转一维数组的映射计算
对称矩阵的压缩
三角矩阵的压缩
稀疏矩阵的数组存储和十字链表存储

四. 串

详见串的模式匹配
ababaaababaa的next数组(-1.0.0.1.2.3.1.1.2.3.4.5)
ababaaababaa的nextval数组(0.1.0.1.0.4.2.1.0.1.0.4)

五.树与二叉树

标签:存储,线性表,队列,next,数据结构,节点,指针
来源: https://www.cnblogs.com/929code/p/16574499.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有