前情提要:数据结构-线性表
| 4FGR の Blog
单链表
线性表的链式存储,其存储并非是一段连续的存储空间,为了能够访问链表中的元素,每个链表节点不仅存储了元素信息,还需要存放一个指向其后继的指针。(本文所有链表实现均有头节点)
结构体定义
1234typedef struct LNode{ int data; struct LNode *next;}LNode, *LinkList;
基本操作的实现
初始化
123456789// 初始化链表bool initList(LinkedList &L){ L = (LNode*)malloc(sizeof(LNode)); if(L == NULL){ return false; } L->next = NULL; return true;}
检查空表
即检查头节点的后继是否为空
1234//检查链表是否为空bool isEmpty(LinkedList L)& ...
数据结构-线性表
本文仅对线性表进行简单叙述,具体实现会专门出教程,并在具体的数据结构后面给出链接。
定义:线性表是具有相同数据类型的n个元素的有限序列
基本操作:
初始化、取值、查找、插入、删除、判空、销毁
线性表的顺序表示-顺序表
我们可以这样定义顺序表
12345#define MAXSIZE 100typedef struct{ int data[MAXSIZE]; //顺序表的元素(假设类型为int,本文元素均以int为例) int lenth; //顺序表的当前长度}SqList;
当然,如果我们想要通过动态分配的顺序表,只需要让data成为一个指针,并且结构体中存在MaxSize描述当前最大容量即可。
特点:逻辑位置与其存储的物理顺序相同
优点:
可随机访问(取值的时间复杂度为O(1))
存储密度高
缺点:
插入和删除的时间花费较大
线性表的存储表示-链表
为了避免顺序表插入和删除的线性开销,我们可以允许表不连续存储,于是链表应运而生
我们常常使用头节点head置于 ...
数据结构绪论
由于几天后数据结构要期末考试,最近几天会出数据结构相关的教程,以作复习。
参考资料:
数据结构(C语言版) –严蔚敏,吴伟民
数据结构与算法分析 –Mark Allen Weiss
2025年数据结构考研复习指导 –王道论坛
数据结构的基本概念
基本术语
数据元素:数据的基本单位,由若干数据项组成
数据对象:具有相同性质的数据元素的集合
抽象数据类型:一组操作的集合
数据结构是相互之间存在一种或多种特定关系的数据元素的集合。在任何问题中,数据元素都不是孤立存在的,它们之间存在某种关系,这种数据元素之间的关系称为结构。数据结构包括三方面内容:逻辑结构、存储结构和数据的运算
数据结构三要素
1.数据的逻辑结构
逻辑结构是指数据元素之间的逻辑关系,与数据的存储无关,分为线性结构和非线性结构
集合:结构中的数据元素除“同属一个集合”外,别无其他关系。
线性结构:结构中的数据存在一对一的关系
树形结构:结构中的数据存在一对多的关系
图状结构:结构中的数据存在多对多的关系
2.数据的存储结构
存储结构是指数据结构在计 ...
题目难点
对数学功底的考察,能否根据题目描述建立起数学公式,
解出关键的未知数(第二次上下车的人数)
题目
洛谷链接: [P1011 NOIP1998 提高组] 车站 -
洛谷 | 计算机科学教育新生态
[NOIP1998 提高组] 车站
题目描述
火车从始发站(称为第 \(1\)
站)开出,在始发站上车的人数为 \(a\),然后到达第 \(2\) 站,在第 \(2\)
站有人上、下车,但上、下车的人数相同,因此在第 \(2\) 站开出时(即在到达第 \(3\) 站之前)车上的人数保持为 \(a\) 人。从第 \(3\) 站起(包括第 \(3\)
站)上、下车的人数有一定规律:上车的人数都是前两站上车人数之和,而下车人数等于上一站上车人数,一直到终点站的前一站(第
\(n-1\)
站),都满足此规律。现给出的条件是:共有 \(n\) 个车站,始发站上车的人数为 \(a\),最后一站下车的人数是 \(m\)(全部下车)。试问 \(x\) 站开出时车上的人数是多少?
输入格式
输入只有一行四个整数,分别表示始发站上车人数 \(a\),车站数 \(n\),终 ...
题目链接:TUOJ(需有账号)
题目背景
传说每当月光遍布西西艾弗岛,总有一道身影默默守护着居民们的美梦。
题目描述
梦境中的西西艾弗岛由n+1
个区域组成。梦境巡查员顿顿每天都会从梦之源(0 号区域)出发,顺次巡查
1,2,⋯,n 号区域,最后从n 号区域返回梦之源。
在梦境梭需要消耗美梦能量:
从梦之源出发时,顿顿会携带若干初始能量;
从第 i
号区域前往下一区域(0≤i≤n)需要消耗 ai
单位能量,因此从第 i
号区域出发时,顿顿剩余的美梦能量需要大于或等于ai单位;
顺利到达第 i*
号区域(1≤i≤n)后,顿顿可以从当地居民的美梦中汲取
bi 单位能量作为补给。
假设顿顿初始携带 w 单位美梦能量,那么首先需要保证
w*≥a0,这样顿顿便可消耗a0 能量穿梭到 1
号区域、进而获得 b1 单位能量补给。巡查 1
号区域后,顿顿剩余能量为
w−a0+b1,如果该数值大于或等于
a*1,顿顿便可继续前往 2 号区域。依此类推,直至最后消耗
an 单位能量从 n
号区域返回梦之源,便算是顺利完成整个巡查。西西艾弗岛,又迎来 ...
数据结构-散列表(hash table)
参考资料:数据结构与算法分析 –Mark Allen Weiss
一、基本介绍
散列(hashing)
:一种以常数平均时间执行插入、删除和查找的技术,但对元素间进行排序的操作不被支持,例如寻找最大值和最小值。
散列表(hash table):
一个含有关键字的具有固定大小的数组,通过关键字查找对应值,只需要O(1)的时间复杂度。
散列函数:将每个关键字映射到从0到size-1这个范围中的某个数,并且放到适当的单元。这个映射就叫做散列函数。
二、散列函数
关键字为整数的设置方法:
如果输入的关键字是整数,则一般合理的方法就是直接返回 关键字%
表长,
最好保证表长为素数(质数),以避免某些特殊情况,例如表长为10,而关键字均以0为个位的情况。
关键字为字符串的设置方法:
通常,关键字是字符串,在这种情形下,散列函数需要仔细选择。
用ASCII码直接相加并取余并不合适,
表长很大,就不能均匀地很好地分配关键字。
代码如下
1234567891011int Hash(const char *key ...
五大编程语言的运算符优先级
图片来自网络, 本文仅供分享、学习目的
C语言
C++
Java
Python
下为Python3的各符号优先级顺序,优先级从高到低
Go
Go的各运算符优先级如下,优先级==从低到高==