一、基本概念 1.1 定义 1.1.1 串 串是由0或者多个字符组成的有限序列。一般记为S='aa1...an' S是串名,ai可以是字母、数字或者其他字符; 1.1.2 串长 串中字符个数n称为串的长度,n=0时的串称为空串 1.1.3 子串 串中任意个连续字符组成的子序列称为该串的子串,包含子串的串相应的称为主串。某个字符在串中的序号称为该字符在串中的位置,当两个串的长度相等,且每个位置对应的字符相同,则这两个串是相等的 1.1.4 空格串 由一个或多个空格组成的串 1.2 串的存储 1.2.1 定长顺序存储 用一组连续的存储单元存储串的字符序列,是一个固定长度的数组 #include <stdio.h> // 固定长度的串 typedef struct SString { char ch[10]; int length; }SString; int main() { SString str; str.ch[0] = 'H'; str.ch[1] = 'e'; str.ch[2] = 'l'; str.ch[3] = 'l'; str.ch[4] = 'o'; str..... 有更新! 数据结构学习笔记--串 数据结构
一、栈 1.1 基本概念 栈是只允许在一端进行插入或删除操作的线性表,这意味着我们可以使用顺序表或者链表的形式来实现一个栈,遵循后进先出的原则 栈顶 线性表允许插入或删除的一端 栈底 不允许插入或删除的一端 空栈 不含有元素的空表 1.2 基本操作 InitStack 初始化一个空栈S Push 入栈 Pop 出栈 GetTop 获取栈顶元素 PrintStack(&S) 遍历栈元素 出栈入栈流程如下 1.3 栈的实现 栈是一个线性表,可以使用顺序表实现,也可以使用链表实现 1.3.1 栈的顺序表实现 使用顺序表实现栈时,需要提前申请连续的内存空间,且存在栈满、扩容等问题 可以建立一个数组,数组头部作为栈底,数组尾部作为栈顶,同时使用一个变量来记录当前栈顶元素所在的数组下标,所有操作都在栈尾进行,这样可以避免移动元素 #include <stdio.h> #include <stdlib.h> #define MAX_SIZE 8 #define ARRAY_STACK_INCRE_MENT 8 typedef enum Status { OK, MEM.... 数据结构学习笔记--栈和队列 算法
一、简介 线性表是n个数据元素的有限序列,例如英文字母的字母表(A,B,C......,Z)。 同一个线性表中的元素必定有相同特性,即属于同一数据对象,相邻数据元素之间存在序偶关系,若将线性表记作(a1,...,ai-1,ai,ai+1,...,an),将ai-1称为ai的直接前驱,ai+1称为ai的直接后继 线性表中元素的个数n(n>=0)定义为线性表的长度,n=0时称为空表 二、线性表的顺序表示和实现 2.1 顺序表的内存 线性表的顺序表示就是用一组地址连续的存储单元一次存储线性表的数据元素; 假设线性表中每个元素占用l个存储单元,并以所占据的第一个存储单元作为数据元素的存储位置,则LOC(ai+1) = LOC(ai)+l,一般来说线性表第i个数据元素的存储位置为LOC(ai) = LOC(a1)+(i-1)*l \ 2.2 添加元素 向线性表中添加一个元素时,线性表长度会加1,且添加元素的为序的后续元素都会在内存中向后移动一位,删除则需要把后续元素都往前移动一位 2.3 删除元素 删除一个元素时,被删除元素的后续元素都会向前移动一位 2.4 根据下标查询元素 因为是数组实.... 有更新! 数据结构学习笔记--线性表 算法
一、简介 1.1 概念 先知悉以下术语概念 数据 --对客观事物的符号表示,再计算机科学中是指所有能输入到计算机中并被处理的符号的总称 数据元素 --数据的基本单位 数据项 --数据的不可分割的最小的单位 数据对象 --性质相同的数据元素的集合 数据结构 --相互之间存在一种或多种特定关系的数据元素的集合 以一个学生管理系统为例说明上述概念对应的具体项 数据 --学生信息管理系统中存储的所有关于学生的信息构成了数据; 数据元素 --每一个学生的全部信息就是一个数据元素,例如: 学号:2020001 姓名:张三 性别:男 年龄:20 专业:计算机科学与技术 入学年份:2020 联系电话:13812345678 邮箱:zhangsan@example.com 数据项 --在上面的数据元素中, 学号:2020001 姓名:张三 性别:男 年龄:20 专业:计算机科学与技术 入学年份:2020 联系电话:13812345678 邮箱:zhangsan@example.com 每个数据项分别描述了学生的某个具体属性 数据对象 --所有性别相同的学生构成一个数据对象,也可以时所有年龄或者专业相同.... 有更新! 数据结构学习笔记--基础概念 算法
1、HashMap HashMap使用数组+链表的形式存储,初始化的时候,会根据传入的数组大小,找到一个最接近且大于当前值的2的幂,源码中方法如下: /** * Returns a power of two size for the given target capacity. */ static final int tableSizeFor(int cap) { int n = cap - 1; n |= n >>> 1; n |= n >>> 2; n |= n >>> 4; n |= n >>> 8; n |= n >>> 16; return (n < 0) ? 1 : (n >= MAXIMUM_CAPACITY) ? MAXIMUM_CAPACITY : n + 1; } 对传入的值做无符号右移,然后经行一个或操作,最终得到一个大于传入的值的2的幂。 hashmap是通过数组+链表或红黑树的形式存储数据的 transient Node<K,V>[] table.... 有更新! Java中的Map 程序人生
一、数据结构的分类 按逻辑结构分类 集合 线性结构 非线性结构 按存储结构分类: 顺序存储 链式存储 索引存储 散列存储 二、顺序表 存储空间连续 三、链表 存储空间不连续 3.1 单链表 3.2 循环链表 3.3 双链表 四、顺序表和链表的比较 有更新! 数据结构与算法基础--数据结构分类 数据结构