数据结构_2

回顾前一篇:

数据结构的作用是按照一定的规则管理和操作数据,有利于程序的编写。

顺序表最简单的可以用数组来实现。可以动态地静态地定义一张顺序表,而数组是以静态定义的。静态定义所分配的内存空间是在栈上的,固定且连续的,不可改动。动态定义所分配的空间是在堆上的,可操作的。当然也是连续的,可以进行扩展(不能缩小吧?),使用完毕后需手动释放,系统不会自动回收,与静态不同。

生成一张顺序表→插入元素→删除元素→系统自动回收/手动释放

链表的操作和顺序表含义是一致的。静态链表的话类似于数组,结点都由程序定义好了,不是临时开辟的,所以链表一般都是动态的。

创建一个链表→插入节点→删除节点→销毁链表。链表使用完后建议销毁它,占内存,动态需要手动释放。方法是:顺着链表,同时释放结点,将表头指针移至表尾,将表头*list的内容置为NULL,这样链表list就空了,防止list变为野指针。


 下面谈谈“栈”和“队列”

栈:“栈”是线性表的一种具体形式,其功能是“先进后出”(LIFO).对栈的操作只能在表尾操作,表尾称为:栈定(top),表头称为:栈底(base/bottom)。栈像个子弹膛,最先进的子弹一定最后弹出。一般栈是以顺序表为基础的,所以一般都是顺序栈。

最开始栈中不含任何数据,叫做空栈,此时栈顶就是栈底。创建一个空栈,首先必须开辟一段连续的空间,此时栈顶与栈底相同。往栈中存放数据,叫做入栈操作,又称压栈。每压入一个数据,top指针自增1.如果栈满了,可追加空间。出栈即top指针减1,再取出指针指向的内容。直到top指针与base指针相同。清空一个栈,将base指针赋值给top指针,表明栈已空。销毁一个栈则不同,首先要释放掉内存空间,然后top和base指针置NULL,设置栈的最大容量为0,计算当前栈的容量只需对top减去base即可。注意:内存空间和当前容量不是一个概念。

队列:“队列”同样需要顺序表或链表为基础,也就是说可以用链表或顺序表来构造一个队列。与栈不同,其功能是先进先出(LIFO)。它要求数据从队尾(rear)进,从对头(front)出。下面介绍链队列的操作。创建一个队列,首先要在内存中创建一个头结点,不存放数据,只是为了方便操作而添加的。当然也可以不定义。然后将队列的头指针和尾指针都指向这个头结点。此时为一个空队列。队列的其他操作含义和栈一致,主要是对结点的指针进行操作,关键是先进先出(LIFO)。销毁队列和销毁链表方法类似。

还有一种用顺序表实现的队列叫做循环队列,其空间可以循环使用。循环队列一般有固定的容量,同样要求先进先出。其逻辑上是循环的,物理上是线性的。整个循环队列逻辑上就是一个缓冲区。循环队列的实现有点像栈,只是当rear指针超出了队列的地址范围时,进行取模运算,使其重新指向0号单元。


posted on 2016-06-07 22:17  常清静  阅读(166)  评论(0编辑  收藏  举报

导航