《数据结构与算法分析c++描述》读书笔记一——表

         学习数据结构与算法的参考书是《数据结构与算法分析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说明队列为空。

你可能感兴趣的:(学习笔记)