数据结构笔记

绪论

结构:元素之间的关系

逻辑结构(关系):集合结构(平等)、线性结构(一对一)、树形结构(一对多)、图形结构(多对多)

物理结构(存储):顺序结构、链式结构

算法

算法:解决特定问题求解步骤的描述

算法特性:输入、输出、有穷性、正确性、可行性

函数的渐进增长:给定两个函数f(n)和g(n),如果存在一个整数N使得对于所有的n>N时f(n)总是比g(n)大,那么,f(n)的渐进增长快于g(n)

推导大O阶:

1. 用常数1取代所有加法常数 

2. 只保留最高阶项 

3. 若最高阶项存在且不为1则去除与该项相乘的常数

原理:随着数据增大,以上三点的影响逐渐变小,直至可被忽略

算法的时间复杂度:语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。记作:T(n)=O(f(n)),f(n)为问题规模n的函数

一般情况下,随着n的增大,T(n)增长最慢的算法为最优算法

算法的空间复杂度:通过计算算法所需的存储空间实现,记作:S(n)=O(f(n)),f(n)为n所占存储空间的函数

线性表

线性表:具有相同类型的数据元素的有限序列

顺序存储结构:内存中一块连续的地址空间

链式存储结构:适用于对插入和删除较多的情况

单链表:数据 + 后继指针

循环链表:最后节点的后继指针指向头结点

双向链表:前驱指针 + 数据 + 后继指针

静态链表:用数组人工制作链表,结构 = 数据 + 下一个数据的索引,适用于没有指针的某些高级语言

栈和队列

栈和队列是一种特殊的线性表

栈:限定仅在表尾(栈顶)进行插入和删除操作的线性表,后进先出

共享空间问题:顺序栈拥有固定的存储空间,当有两个相同的栈时可以使用一个数组存储,数组两端分别作为一个栈的栈底,好处在于空间共享,变相扩容

栈应用之递归:

自己调用自己的函数成为递归函数,递归必须至少有一个终结条件

斐波那契数列:F(n)=F(n-1)+F(n-2)(n>1),前面相邻两项之后构成了后一项

栈应用之四则运算:

逆波兰(后缀)表示法:所有运算符都在操作数的后面,对比于常规的中缀表示法

队列:只允许在一段进行插入操作,而在另一端进行删除操作的线性表,先进先出

循环队列:解决队列顺序存储的问题,通用计算队列长度公式:(rear - front + QueueSize) % QueueSize

串:由字符组成的有限序列,也叫字符串。是一种由字符组成的特殊的线性表

串的比较:通过ASCII码

串的顺序存储结构:使用最高位或者末位记录串的长度数据,或者将末位置为\0表示结束

串的链式存储结构:指定一个节点可以容纳多少个字符,不足为补特殊字符,如"#"

模式匹配之朴素算法:按位比较,一旦不同则左移一位重新按位比较

模式匹配之KMP算法:已经比较过的字符不应该再次比较,是朴素算法的优化

二叉树......

赫夫曼书:最优二叉树,压缩原理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值