学习数据结构与算法的参考书是《数据结构与算法分析c++描述》一书。
首先看的是最基本的ADT(抽象数据结构)表、栈、队列。
1、表:是一种有限且有序的序列。实现的方式有两种:数组(所有操作都可以用数组来实现,查找功能、在表尾插入数据删除数据很方便);链表(每个数据不必存在连续存储,插入、删除数据很方便)。
2、栈: 限制数据插入和删除只能在一个位置上进行,就是表的末端,即栈顶(特点先进后出);用数组和链表(单链表即可)对所有操作(只有push、pop(top)操作)都是常数时间。
3、队列:插入(表的末尾)在一端进行,删除(表的开头)在另一端进行。特点:先进先出;用数组和链表(单链表)实现对所有的操作都是常数时间的。但需注意:用数组实现时,多用的循环数组。
用循环数组实现时,需要注意的细节问题:若一个数组的长度为n,那么它可以存储n个数据,设队列首元素位置号为front,队列尾元素位置号为back,数组容量为capacity,数组为空的表示方式为back比front小1(因为是循环序列,所以认定“capacity-1比0位置小1”)。这时候这个数组将有如下n+1种不同的状态:数组为空,数组中有1个数据,有2个数据,3个数据,。。。。。,n个数据,当back的位置比front大n时,表示队列中有n+1个元素,;当数组满的时候,back位置是capacity-1,这个时候,满队列和空队列无法区分了。所以需要改进算法来消除这个问题。方式一:用一个变量来计数当前元素个数;方式二:使数组容量为capacity,但是只能装载capacity-1个数据,这样当back等于capacity-2时,说明队列满了;capacity-1说明队列为空。
本文是《数据结构与算法分析c++描述》的读书笔记,主要讨论了三种基本的抽象数据结构:表、栈和队列。表通过数组和链表实现,栈遵循先进后出原则,队列则是先进先出。数组和链表均可用于栈和队列的操作,但在特定情况下,如数组实现队列时,需要处理满队列和空队列的状态,可以通过额外计数或调整容量解决。
1940

被折叠的 条评论
为什么被折叠?



