数据结构基础之栈
2015-12-21 22:44
155 查看
数据结构之栈结构:
1. 栈的特点:
相比于一个普通的数组,栈控制了操作的方法,元素只能在栈顶入栈,也只能在栈顶出栈。
2. 栈的用途:
在深入优先搜索(DFS)中会用到,比如现在有一个图如下:
现在要从A出发要遍历整张图,那么首先看与A相连的B、D,任选一个,比如B,那么要先保存A,将其压入栈,然后遍历B,B又到C,然后C没有其余的路径就可以返回了,取出栈顶的元素B,B也没有其余路径,再取出栈顶元素A,现在A可以走D,那么D压入栈,走E,返回到D,再返回到A,现在A是出发点,又没有其余路径,那么说明整张图都遍历完全。
访问顺序为:A->B->C->B->A->D->E->D->A (大致如此)
在这个搜索中,栈的作用便可以很清晰的看到。
在程序设计中,深入优先搜索是很重要的一种算法,也很常见,经典的迷宫找出路问题就要用到它。
3. 栈的写法:
如果自己手写栈的模板的话,可以封装成一个结构体或者类,首先要有元素本体、入栈操作、出栈操作、取栈顶元素,这三个是最基本的。比如我要建一个int类型的栈的话,那么可以封装如下:
如果在一些程序设计比赛,比如acm中,一般不会进行栈的封装,要么直接调用STL,要么简略写下就可以了,如下:
int st[1000],top=0;
入栈:st[top++]=data;
出栈:data=st[--top];
4. 对于栈的说明
与队列一样,都是数据结构最最基础的一块,要熟练掌握,同时了解一下他的特殊用法,比如单调栈等。
1. 栈的特点:
相比于一个普通的数组,栈控制了操作的方法,元素只能在栈顶入栈,也只能在栈顶出栈。
2. 栈的用途:
在深入优先搜索(DFS)中会用到,比如现在有一个图如下:
现在要从A出发要遍历整张图,那么首先看与A相连的B、D,任选一个,比如B,那么要先保存A,将其压入栈,然后遍历B,B又到C,然后C没有其余的路径就可以返回了,取出栈顶的元素B,B也没有其余路径,再取出栈顶元素A,现在A可以走D,那么D压入栈,走E,返回到D,再返回到A,现在A是出发点,又没有其余路径,那么说明整张图都遍历完全。
访问顺序为:A->B->C->B->A->D->E->D->A (大致如此)
在这个搜索中,栈的作用便可以很清晰的看到。
在程序设计中,深入优先搜索是很重要的一种算法,也很常见,经典的迷宫找出路问题就要用到它。
3. 栈的写法:
如果自己手写栈的模板的话,可以封装成一个结构体或者类,首先要有元素本体、入栈操作、出栈操作、取栈顶元素,这三个是最基本的。比如我要建一个int类型的栈的话,那么可以封装如下:
typedef struct { int st[1000]; //栈里面的元素 int top; //栈顶,最初栈里面没有东西,可以设置为0 bool push(int data) //入栈操作 { if(top>=1000) //表示栈已经被装满了 { printf("栈满!\n"); return false; //返回0表示没有入栈成功 } st[top++]=data; return true; } bool pop() //出栈,即将现在栈顶的那个元素舍去 { if(top==0) //表示栈空 { printf("栈空!\n"); return false; } top--; } int front() //取栈头元素 { return st[top-1]; } }Stack;
如果在一些程序设计比赛,比如acm中,一般不会进行栈的封装,要么直接调用STL,要么简略写下就可以了,如下:
int st[1000],top=0;
入栈:st[top++]=data;
出栈:data=st[--top];
4. 对于栈的说明
与队列一样,都是数据结构最最基础的一块,要熟练掌握,同时了解一下他的特殊用法,比如单调栈等。
相关文章推荐
- 数据结构中各种内部排序算法的比较
- poj 食物链 数据结构 并查集
- 数据结构学期学习总结
- 数据结构基础(二)栈和队列
- 09 DirectoryStructure
- 数据结构实验之排序六:希尔排序
- UI day 14 XML JSON数据结构解析
- 数据结构2 二叉树的高度和宽度
- 对数据库索引的数据结构学习
- 探索 ConcurrentHashMap 高并发性的实现机制
- 数据结构:二叉搜索树(BST)的基本操作
- 数据结构:二叉搜索树(BST)的基本操作
- 数据结构与算法书籍推荐
- 2014级数据结构课程总结全链接
- Redis数据结构详解
- [Coursera]数据结构基础_Week2_线性表_Q3
- [Coursera]数据结构基础_Week2_线性表_Q2
- 数据结构基础(C语言版)(朱仲涛翻译)代码学习 第一章001
- 数据结构之排序算法(二)-冒泡排序及改进
- [Coursera]数据结构基础_Week2_线性表_Q1