栈和队列 - 数据结构和算法23
2012-12-25 05:59
351 查看
栈和队列
让编程改变世界Change the world by program
栈和队列
[caption id="attachment_2026" align="alignnone" width="600"]栈和队列[/caption]
栈的定义
栈是一种重要的线性结构,可以这样讲,栈是前面讲过的线性表的一种具体形式。就像我们刚才的例子,栈这种后进先出的数据结构应用是非常广泛的。
在生活中,例如我们的浏览器,每点击一次“后退”都是退回到最近的一次浏览网页。
例如我们Word,Photoshop等的“撤销”功能也是如此。再例如我们C语言的函数,也是利用栈的基本原理实现的。
官方定义:栈(Stack)是一个后进先出(Last in first out,LIFO)的线性表,它要求只在表尾进行删除和插入操作。
小甲鱼定义:所谓的栈,其实也就是一个特殊的线性表(顺序表、链表),但是它在操作上有一些特殊的要求和限制:
栈的元素必须“后进先出”。
栈的操作只能在这个线性表的表尾进行。
注:对于栈来说,这个表尾称为栈的栈顶(top),相应的表头称为栈底(bottom)。
栈的插入和删除操作
栈的插入操作(Push),叫做进栈,也称为压栈,入栈。类似子弹放入弹夹的动作。栈的删除操作(Pop),叫做出栈,也称为弹栈。如同弹夹中的子弹出夹。
请看动画演示!
栈的顺序存储结构
因为栈的本质是一个线性表,线性表有两种存储形式,那么栈也有分为栈的顺序存储结构和栈的链式存储结构。最开始栈中不含有任何数据,叫做空栈,此时栈顶就是栈底。然后数据从栈顶进入,栈顶栈底分离,整个栈的当前容量变大。数据出栈时从栈顶弹出,栈顶下移,整个栈的当前容量变小。
妈呀,说啥呢?
请结合下图发挥想象力理解并记住:
[caption id="attachment_2027" align="alignnone" width="548"]
栈和队列[/caption]
[codesyntax lang="c"]
typedef struct { ElemType *base; ElemType *top; int stackSize; }sqStack;
[/codesyntax]
这里定义了一个顺序存储的栈,它包含了三个元素:base,top,stackSize。
其中base是指向栈底的指针变量,top是指向栈顶的指针变量,stackSize指示栈的当前可使用的最大容量。
创建一个栈
[codesyntax lang="c"]#define STACK_INIT_SIZE 100 initStack(sqStack *s) { s->base = (ElemType *)malloc( STACK_INIT_SIZE * sizeof(ElemType) ); if( !s->base ) exit(0); s->top = s->base; // 最开始,栈顶就是栈底 s->stackSize = STACK_INIT_SIZE; }
[/codesyntax]
入栈操作
入栈操作又叫压栈操作,就是向栈中存放数据。入栈操作要在栈顶进行,每次向栈中压入一个数据,top指针就要+1,知道栈满为止。
请看代码挺小甲鱼详细解释:Push.c
出栈操作
出栈操作就是在栈顶取出数据,栈顶指针随之下移的操作。每当从栈内弹出一个数据,栈的当前容量就-1。
代码清单:
[codesyntax lang="c"]
Pop(sqStack *s, ElemType *e) { if( s->top == s->base ) // 栈已空空是也 return; *e = *--(s->top); }
[/codesyntax]
[buy] 获得所有教学视频、课件、源代码等资源打包 [/buy]
[Downlink href='http://kuai.xunlei.com/d/BdsUAwqRVgDhmBNRb6b']视频下载[/Downlink]
[Downlink href='http://urlxf.qq.com/?VrYJnaz']备胎下载[/Downlink]
相关文章推荐
- 栈和队列 - 数据结构和算法23
- 栈和队列1 – 数据结构和算法23
- 【算法和数据结构】线性表(二)队列的定义和封装
- [算法和数据结构]之一:栈和队列简析
- 【算法和数据结构】_9_线性结构_队列_续_1
- JavaScript数据结构和算法----队列
- 数据结构之自建算法库——顺序环形队列
- 【郝斌数据结构自学笔记】35-46_队列的定义、分类_链式队列伪算法的讲解_循环队列伪算法的讲解
- 【数据结构和算法】java 队列实现
- 数据结构与算法之栈与队列
- 栈和队列8 - 数据结构和算法30
- 栈和队列4 – 数据结构和算法26
- 数据结构和算法学习(4)-栈和队列
- C 算法与数据结构 队列
- 浅谈算法和数据结构: 一 栈和队列
- 『Python CoolBook:heapq』数据结构和算法_heapq堆队列算法&容器排序
- 用JS描述的数据结构及算法表示——栈和队列(基础版)
- 算法与数据结构-栈与队列 讲解与java代码实现
- Python实现的数据结构与算法之双端队列详解
- 算法与数据结构题目的 PHP 实现:栈和队列 设计一个有 getMin 功能的栈