前言
最近做数据结构导论的题总是遇到:
- 在这个链表中插入、删除节点怎么表示
- 这个队列为空怎么判断
- 如何表示这个指针在这个栈中指向的是那个节点
也挺让人头疼的,
但 其实掌握了每个存储结构都理解了
熟悉了每个存储结构的示意图
对于它的各种操作
如何表示也就容易掌握了
对于几种我个人比较容易混乱的存储结构
我做了一个简单的整理
希望能对大家有所帮助
正文
单链表
带有头结点的空链表
头指针指向头结点,头结点的指针域为空
代码表示为空链表:head→next=null
带有头结点的非空链表
头指针指向头结点,头结点指向首结点,最后的尾结点的指针域为空
代码表示首结点:head→next
循环链表
单向循环链表
带头指针的空表
头指针指向头结点,头结点循环仍指向头结点
带头指针的非空表
头指针指向头结点,尾结点指向头结点
带尾指针的空表
尾指针指向头结点,头结点循环仍指向头结点
带尾指针的非空表
尾指针指向尾结点,尾结点指向头结点
代码表示首结点:rear→next→next
双向循环链表
结点的表示方法
在双循环链表中一个结点由三部分组成,
一个数据域:data,两个指针域:prior、next
空表
头结点指向头结点,头结点的两个指针全都指向头结点
非空表
头结点的prior指向尾结点,尾结点的next指向头结点
链栈
链栈就是利用单链表来表示的
LS即可为头指针
空栈
LS指向头结点,头结点为空
代码表示空:LS→next=null
非空栈
首结点为栈顶结点,尾结点为栈底结点。
循环队列
空队列
在循环队列中首指针和尾指针指向同一个结点时为空队列
并不限制在某个特定的结点
代码表示空队列:CQ.rear == CQ.front
满队列
图中因为被占用、有数据的结点
循环指针空出一个结点不被占用,当尾指针差一个结点
追到首结点的时候为满队列
代码表示满队列:(CQ.rear+1)% maxsize==CQ.front
链队列
空队列
首指针和尾指针同时指向头结点,头结点为空
代码表示空队列:LQ.rear==LQ.front
非空队列
头指针指向头结点,尾指针指向尾结点
结语
这个内容的考题,感觉比较固定,比较简单
有时候会有一些变换,但 只要理解了它的存储结构
任怎么变,都没有什么问题