码迷,mamicode.com
首页 > 其他好文 > 详细

数据结构_2

时间:2016-06-08 00:02:38      阅读:244      评论:0      收藏:0      [点我收藏+]

标签:

回顾前一篇:

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

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

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

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

创建一个链表→插入节点→删除节点→销毁链表。链表使用完后建议销毁它,占内存,动态需要手动释放。方法是:顺着链表,同时释放结点,将表头指针移至表尾,将表头*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号单元。


技术分享
技术分享

数据结构_2

标签:

原文地址:http://www.cnblogs.com/Alan-h/p/5568492.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!