数据结构基础之栈

数据结构之栈结构:

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类型的栈的话,那么可以封装如下:

 1 typedef struct
 2 {
 3   int st[1000];       //栈里面的元素
 4   int top;            //栈顶,最初栈里面没有东西,可以设置为0
 5   bool push(int data) //入栈操作
 6   {
 7     if(top>=1000)     //表示栈已经被装满了
 8     {
 9       printf("栈满!\n");
10       return false;   //返回0表示没有入栈成功
11     }
12     st[top++]=data;
13     return true;
14   }
15   bool pop()          //出栈,即将现在栈顶的那个元素舍去
16   {
17     if(top==0)        //表示栈空
18     {
19       printf("栈空!\n");
20       return false;
21     }
22     top--;
23   }
24   int front()         //取栈头元素
25   {
26     return st[top-1];
27   }
28 }Stack; 

如果在一些程序设计比赛,比如acm中,一般不会进行栈的封装,要么直接调用STL,要么简略写下就可以了,如下:

int st[1000],top=0;

入栈:st[top++]=data;

出栈:data=st[--top];

4.  对于栈的说明

与队列一样,都是数据结构最最基础的一块,要熟练掌握,同时了解一下他的特殊用法,比如单调栈等。

时间: 2024-10-07 05:45:40

数据结构基础之栈的相关文章

数据结构和算法 (二)数据结构基础、线性表、栈和队列、数组和字符串

Java面试宝典之数据结构基础 —— 线性表篇 一.数据结构概念 用我的理解,数据结构包含数据和结构,通俗一点就是将数据按照一定的结构组合起来,不同的组合方式会有不同的效率,使用不同的场景,如此而已.比 如我们最常用的数组,就是一种数据结构,有独特的承载数据的方式,按顺序排列,其特点就是你可以根据下标快速查找元素,但是因为在数组中插入和删除元素会 有其它元素较大幅度的便宜,所以会带来较多的消耗,所以因为这种特点,使得数组适合:查询比较频繁,增.删比较少的情况,这就是数据结构的概念.数据结构 包括

数据结构基础总结

数据的逻辑结构 数据的存储结构 单链表是递归结构 迭代是指从当前元素获得集合中的后继元素. 迭代功能由Tterable可迭代接口和Tterator迭代器接口实现. 栈和队列 是两种特殊的线性表,特殊之处在于插入和删除操作的位置受到限制. 栈:插入和删除只允许在线性表的一端进行,后进先出. 队列:插入和删除分别在线性表的两端进行,先进先出. 数组: 1.数组是随机存取结构,这是数组最大的优点. 2.数组一旦占用一片存储空间,这片存储空间的地址和长度就确定的,不能更改,因此数组只能进行赋值.取值两种

算法与数据结构基础10:C++实现——拓扑排序

一 定义 拓扑排序是对有向无环图(Directed Acyclic Graph简称DAG)顶点的一种排序, 它使得如果存在一条从顶点A到顶点B的路径,那么在排序中B出现在A的后面. 二 先决条件 能够进行拓扑排序图有两个先决条件:有向.无环,即有向无环图. 三 偏序全序 连通图:任意两点之间都存在至少一条边 偏序:非连通图(有向无环图满足偏序关系) 全序:单连通图 四 结果唯一性 对于仅满足偏序关系的有向无环图中,因为有两个点之间的关系是不确定的,所以导致排序的结果是不唯一的. 满足全序关系的有

数据结构实践项目——栈

本组项目针对<数据结构基础系列(3):线性表>中的1-6课: 1 "栈和队列"导学 2 栈的定义 3 栈的顺序存储结构及其基本运算实现 4 栈的链式存储结构及其基本运算的实现 5 栈的应用1-表达式求值 6 栈的应用2-迷宫问题 [项目1 - 建立顺序栈算法库] 定义顺序栈存储结构,实现其基本运算,并完成测试. 要求: 1.头文件sqstack.h中定义数据结构并声明用于完成基本运算的函数.对应基本运算的函数包括: void InitStack(SqStack *&

Python之微信H5斗牛出租平台搭建数据结构基础

微信H5斗牛出租平台搭建下载网站:h5.fanshubbs.com联系Q1687054422一.数据结构基础 a.什么是数据结构 b.数据结构的分类 c.列表 列表d.栈 二.栈的Python实现 a.栈的应用--括号匹配为题 括号匹配实现b.队列 c.队列的实现 d.队列的实现原理--环形队列 e.队列的实现原理--环形队列 ![](http://i2.51cto.com/images/blog/201802/03/07e08bf827bebcb6e258e9ccfd28f20a.jpg?x-

数据结构算法(1)--栈与队列

数据结构算法(1)--栈与队列 总结并记录学习数据结构过程中遇到的问题及算法. 一些常见算法: Note: 基础应用. 递归的非递归转化. 阶乘 递归实现: #include <iostream> using namespace std; int F(int n) { if (n == 0 || n == 1) return 1; else return n * F(n - 1); } int main() { int s; cin >> s; int result = F(s);

数据结构快速回顾——栈

堆栈,也可直接称栈,是一种特殊的串行形式的数据结构,它的特殊之处在于只能允许在链结串行或阵列的一端进行加入资料和输出资料的运算.另外堆栈也可以用一维阵列或连结串行的形式来完成. 1 #define STACK_INIT_SIZE 100 2 #define STACKINCREMENT 10 3 4 typedef struct 5 { int* top; 6 int* base; 7 int stacksize; 8 }SqStack; 9 10 int InitStack(SqStack &

javascript数据结构与算法---栈

在上一遍博客介绍了下列表,列表是最简单的一种结构,但是如果要处理一些比较复杂的结构,列表显得太简陋了,所以我们需要某种和列表类似但是更复杂的数据结构---栈.栈是一种高效的数据结构,因为数据只能在栈顶添加或删除,所以这样操作很快,而且容易实现. 一:对栈的操作. 栈是一种特殊的列表,栈内的元素只能通过列表的一端访问,这一端陈为栈顶.比如餐馆里面洗盘子,只能先洗最上面的盘子,盘子洗完后,也只能螺到这一摞盘子的最上面.栈被称为 "后入先出"(LIFO)的数据结构. 由于栈具有后入先出的特点

中国大学MOOC-陈越、何钦铭-数据结构基础习题集 03-1. 二分法求多项式单根

03-1. 二分法求多项式单根(20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 杨起帆(浙江大学城市学院) 二分法求函数根的原理为:如果连续函数f(x)在区间[a, b]的两个端点取值异号,即f(a)f(b)<0,则它在这个区间内至少存在1个根r,即f(r)=0. 二分法的步骤为: 检查区间长度,如果小于给定阈值,则停止,输出区间中点(a+b)/2:否则 如果f(a)f(b)<0,则计算中点的值f((a+b)/2): 如