《大话数据结构》读书笔记

内容摘要

指针

链表

对插入或删除数据频繁的操作,优势明显

  • LinkList p; 声明指针p
  • 指针插入时,应先将p的后继结点改为s(插入元素)的后继结点,再将结点s变成p的后继结点(插入元素先接后,再接前)
  • 指针删除时,将p的后继结点改成p的后继的后继结点 (删除元素后元素绕前)
  • 双向链表插入元素时,先搞定S(插入元素)的前驱和后继,再搞定后结点的前驱,最后解决前结点的后继
  • p->next 下一个结点
  • p->data p本身的值
  • p->prior p的前驱
  • ListLength() 求线性表的长度
  • GetElem() 对于单链表实现获取第i个元素的数据的操作
  • LocateElem() 获得元素位置
结点
  • s = ( LinkList ) malloc ( sizeof ( Node ) ) 生成新结点 ( C标准函数 )
  • free() 系统回收结点,释放内存

  • 栈是限定仅在表尾进行插入和删除操作的线性表
  • 后进先出(UIFO结构)
  • 递归用栈实现,存储数据,后又以存储的次序恢复数据
  • Push(*S,e) 插入元素e到栈S中并成为栈顶元素
  • Pop(*S,*e) 删除栈S中栈顶元素,并用e
  • InitStack(*S) 创建空栈
  • DestroyStack(*S) 销毁栈
  • ClearStack(*S) 清空栈
  • StackEmpty(*S) 栈为空,返回true;不为空,输出false
  • GetTop(S,*e) 栈存在且非空,用e返回S的栈顶元素
  • StackLength(S) 返回栈S的元素个数

链栈

  • 链栈不需要头结点,因为栈顶在头部
  • LinkStackPtr s = ( LinkStackPtr ) malloc ( sizeof ( StackNode ) )

队列

  • 队列只允许在一端插入,另一端删除的线性表
  • 先进先出 ( FIFO )
  • 允许插入的叫队尾,允许删除的叫队头
  • InitQueue(*Q) 建立空队伍Q
  • DestroyQueue(*Q) 销毁队列Q
  • ClearQueue(Q) 将队列Q清空
  • QueueEmpty(Q) 队列Q为空,返回true,否则返回false
  • GetHead(Q,*e) 若队列Q存在且非空,用e返回队列Q的队头元素
  • EnQueue(*Q,e) 若队列Q存在,插入新元素e到队列Q中并成为队尾元素
  • DeQueue(*Q,*e) 删除队列Q中的对头元素,并用额返回其值
  • QueueLength(Q) 返回队列Q的元素个数
  • 循环队列满的条件( rear + 1 ) % QueueSize == front
  • 队列长度公式( rear - front + QueueSize )% QueueSize
  • QueuePtr front,rear 定义队头,队尾指针

字符串

  • StrAssign ( T , *chars ) 生成一个其值等于字符串常量chars的串T
  • StrCopy ( T , S ) 串S存在,由串S复制得串T
  • ClearString ( S ) 串S存在,将串清空
  • StringEmpy ( S ) 若串S为空,返回true,否则为false
  • StrLength ( S ) 返回串S的元素个数,即串的长度
  • StrCompare ( S , T ) 若S>T,返回值>0,若S=T,返回0,若S<T,返回值<0
  • Concat ( T,S1,S2 ) 用T返回由S1和S2联接而成的新串
  • SubString(Sub,S,pos,len) 串S存在,1<=pos<=StrLength(S), 且0<=len<=StrLength(S)–pos+1,用Sub返回串S的第pos个字符起长度为len的子串
  • Index(S,T,pos) 串S和T存在,T是非空串,1<=pos<=StrLength(S)。若主串S中存在和串T值相同的子串,则返回它在主串S中第pos个人字符之后第一次出现的位置,否则返回0。
  • Replace(S,T,V) 串S、T、V存在,T是非空串,用V代替主串S中出现的所有与T相等的不重叠的子串。
  • StrInsert(S,pos,T) 串S和T存在,1<=pos<=StrLength(S)+1。在串S的第pos个字符之前插入串
  • StrDelete(S,pos,len) 串S存在,1<=pos<=StrLength(S)-len+1。从串S中删除第pos个字符起长度为len的子串
  • 串的链式存储结构在连接串与串操作时方便
  • 串的链式存储结构不如顺序存储灵活,性能不如顺序结构好
  • reverse() 逆转操作

  • 堆可由C语言的动态分配函数malloc()和free()管理

C#

  • ToLower() 转小写
  • ToUpper() 转大写
  • IndexOf() 从左查找子串位置(操作名有修改)
  • LastIndexOf() 从右查找子串位置
  • Trim() 去除两边空格

随机数

  • srand ( time(0) ) 随机种子
  • rand()%i+1 随机生成1~i的数

数组

  • 数组元素由data和cur(游标)组成,游标相当于单链表中的next指针
  • 用数组描述的链表叫静态链表(游标实现法)
  • Malloc_SSL() 获得空闲分量的下标

KMP模式匹配算法

  • KMP模式匹配算法就是为了让没必要的回溯发生

  • InitTree(*T) 构造空树T
  • DestroyTree(*T) 销毁数T
  • CreateTree(*T,definition) 按definition中给出树的定义来构造树
  • ClearTree(*T) 若树T存在,将树T清为空树
  • TreeEmpty(T) 若T为空树,返回true,否则返回false
  • TreeDepth(T) 返回T的深度
  • Root(T) 返回T的根节点
  • Value(T,cur_e) cur_e是树T的一个结点,返回此结点的值
  • Assign(T,cur_e,value) 给树的结点cur_e赋值为value
  • Parent(T,cur_e) 若cur_e是树T的非根结点,则返回它的双亲,否则返回空
  • LeftChild(T,cur_e) 若cur_e是树T的非叶结点,则返回它的最左孩子,否则返回空
  • RightSibling(T,cur_e) 若cur_e有右兄弟,则返回它的右兄弟,否则返回空
  • InsertChild(*T,*p,i,c) 其中p指向树T的某个结点,i为所指结点p的度加上1,非空树c与T不相交,操作结果为插入c为数T中p指结点的第i棵子树
  • DeleteChild(*T,*p,i) 其中p指向树T的某个结点,i为所指结点p的度,操作结果为删除T中的p所指结点的第i棵子树

线索二叉树

  • 线索化的过程就是在遍历的过程中修改空指针的过程

本书免费访问路径

https://juejin.cn/post/6924311052540739592

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

亖嘁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值