#链表的应用
#书中链表的应用举出了三个例子:多项式ADT(使用链表来存储多项式并进行与之相关的操作),第二则是“基数排序”,可以理解为“桶排序”的升级版,即:先确定一个基,先把要排列的数按最低位进行桶排序,然后是倒数第二高的位,直到最高位位置为止,这个实现起来不难,值得注意的是,前边对低位的排序保证了后边排序高位时进入桶的顺序是从低到高(有兴趣的可以自己实现一下试试,不了解桶排序的也应该去百度一下)。
#在我看来应该还是第三个更为有趣:多重表。相对于前两种,这用应用可能更加偏向实用。众所周知,有一维数组,就有高维数组,相应的,与一维的链表相应的,也有多重链表:下边放出多重表的实现图
容易看出,它是一个由多组循环链表构成的二维结构,我们用表头作为坐标轴上的点,两组链表构成了x,y轴。如果某个元素同时具有Cn,Sm两种属性,那么就创造一个新的结点,将它添加到以Cn为表头和以Sm为表头的链表的交点。而使用循环链表则使得沿坐标轴的查找操作变得更加方便。
和一维链表一样,使用多重链表的目的是节约空间,在使用多维数组空间利用率比较低的时候,多重表将是一个不错的选择。
#在本节末,本书提出了链表的另一种实现方法:游标实现。
游标实现的优势是避免了使用malloc函数和free函数,从而适应了那些无法使用指针的语言。它的缺点则是必须知道链表的容量,从而确定制作多大的游标(一个未放入值的链表)模拟的malloc函数和free函数就是通过在游标中存取节点实现的。感兴趣的读者可以自己实现以下,再此便不再赘述。
#栈:
栈是一种特殊的表,它只允许对首元素进行操作,因此常用于解决“后进先出”类型的问题。
栈的实现可以根据上述黑体字对表的实现进行改写得到,因此不再多做描述。
#队列:
队列也是一种特殊的表,不同的是它允许对队首和队尾两个元素进行操作,它常用于解决“先进先出”的问题。
队列的实现亦不复杂,请读者自行脑补!
P.S. :其实栈和队列是数据结构中相当重要的一部分,不过我之前打的稿子没保存,所以丢掉了,又懒得重新打。。。。。。
另一方面,关于栈和队列,介绍的博客并不在少,还请各位看官出门右拐,自行百度好了。
最后,c++的STL库中其实包含了队列和栈的实现,可以极其方便的调用,因此我们大都不直接写出来,本章的意义,也只在于引导大家去理解这两种数据结构,真正用的时候,还是STL来的方便啊!