当前位置: 首页 > news >正文

舟山市建设工程造价管理协会网站聊城做网站的公司精英

舟山市建设工程造价管理协会网站,聊城做网站的公司精英,2019长沙企业网站建设优惠,php建站系统源码一.什么是栈 堆栈又名栈(stack),它是一种运算受限的数据结构(线性表),只不过他和数组不同,数组我们可以想象成一个装巧克力的盒子,你想拿一块巧克力,不需要改变其他巧克…

一.什么是栈

堆栈又名栈(stack),它是一种运算受限的数据结构(线性表),只不过他和数组不同,数组我们可以想象成一个装巧克力的盒子,你想拿一块巧克力,不需要改变其他巧克力的位置,而栈就相当于是一个只有上方有一个口且宽度只能容纳一块巧克力的盒子,如图:

那如果我们想拿最下面的巧克力该怎么办呢?就需要把这颗巧克力上面的所有巧克力都取出,这样才能取出最下面的巧克力。我们可以把栈想象成是一个封了底的数组,要想拿走一个值就需要把它上面的所有值都取出,同理,如果我们想加入一个数据,也只能加到栈的最顶端。这就是栈。

二.栈的具体实现 

1.手写栈

如果要手写一个栈,我们优先选择用和栈差别最小的数组模拟栈,我们要想模拟一个栈,需要拥有几个操作函数,如下。

①我们要编写push函数,作用是往栈里输入数据

     要想编写这样一个函数,我们首先需要确定数组(栈)的顶端,再把数放进去。我们可以定义一个栈的长度变量,初始值为0,你每输入一个数据就++。这样就可以很好的解决栈的输入了,我们看代码:

void push(char x) {  //top是栈的长度,M是所模拟的数组的长度,s是栈的名字,x是要往栈顶放的数if(top<M) {    //判断栈的长度不超过模拟它的数组的长度,则可以输入。top++;     //将栈顶++s[top]=x;  //把栈顶值设为x}
}

②我们要编写GetTop 函数,作用是获取栈顶的值

      这个很简单,我们直接获取数组的第top项就可以了。我们看代码:

char getTop() {return s[top];  //返回栈顶元素
}

③我们要编写弹栈函数,目的是删除栈顶元素,以取出下一个元素。

     我们可以直接让top--,这样原来的栈顶元素就不在这个栈中了,也就删除了栈顶元素。我们看代码:

void pop() {if(top>0) {  //如果栈不空top--;   //删除栈顶元素}
}

④我们要编写Getlen函数,目的是获取栈的长度。

       由于top就是代表着栈顶元素的位置,所以我们只要返回top的值就可以了。我们看代码:

int getlen() {return top;
}

接下来把所有函数都放在一起发个程序:

#include<iostream>
using namespace std;
const int M=10;   //M大小可动态调整
int s[M+1];
int top=0;
void push(int x) {if(top<M) {top++;s[top]=x;}
}
void pop() {if(top>0) {top--;} 
}
int getTop() {return s[top]; 
}
int getlen() {return top;
}int main() {return 0;
}

二.STL模板

有的人可能会说,手写栈实在太麻烦了,有没有简单的方法呢?当然有!接下来我就给大家讲。

STL模板不需要你手动定义栈中的函数,他已经给你定义好了函数和对应的栈,也不用你再用数组模拟了。但想用这个定义好了的栈,我们要导入一个头文件,如下

#include<stack>

一切准备就绪,我们要想定义一个STL栈,需要用如下代码:

stack<int>s; 

就是stack后面尖括号里写数据类型,然后再写一个栈名就可以了。

STL栈里面有一些常用的函数。

1.push,作用是往栈里输入一个数据,只不过是用栈名.push(输入的数据)的方式输入。如下:

s.push(x)

 2.top,和上面的Gettop函数的作用相同。也需要用栈名.top()的方式来调用。如下:

s.top();

3.pop,和上面的pop作用相同。如下:

s.pop();

4.size,和上面的Getlen函数作用相同。如下:

s.size();

三.例题

题目描述

假设一个表达式有英文字母(小写)、运算符(+-*/)和左右小(圆)括号构成,以 @ 作为表达式的结束符。请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则输出 YES;否则输出 NO。表达式长度小于 255,左圆括号少于 20 个。

输入格式

一行:表达式。

输出格式

一行:YES 或 NO

输入输出样例

输入 #1复制

2*(x+y)/(1-x)@

输出 #1复制

YES

输入 #2复制

(25+x)*(a*(a+b+b)@

输出 #2复制

NO

说明/提示

表达式长度小于 255,左圆括号少于 20 个。

 程序 (装逼代码)

#include<bits/stdc++.h>
using namespace std;
stack<char> a;
int main() {string s;cin>>s;for(int i=0; i<s.length(); i++) {if(s[i]=='(') {a.push(s[i]);}if(s[i]==')') {if(a.size()>=1&&a.top()=='(') {a.pop();} else {cout<<"NO";return 0;}}}if(a.size==0)cout<<"YES";else cout<<"NO";return 0;
}

http://www.yayakq.cn/news/411820/

相关文章:

  • 微网站访问量网站和新媒体建设方案
  • wordpress建站行吗兰州微网站建设
  • 网站建设 前后台目录结构简单asp网站源码
  • 网站需要怎么优化比较好苏州手机社区网站建设
  • 欧 美 做 爱 视频网站天元建设集团有限公司第六分公司
  • 泸西网站建设如何开自己的网站
  • 做外贸哪些网站可以找客户wordpress 主题打包
  • 云主机 小型网站沈阳软件公司 网站制作
  • 有产品做推广,选哪个 网站海外营销推广方案
  • 杭州外贸网站建设公司申跃企业公示信息查询系统辽宁
  • 深圳专业学校网站建设如何设置网站根目录
  • 网站通栏广告素材丹灶网站建设案例
  • 国外品牌网站建设上杭网站定制
  • 凡科可以做返利网站吗如何介绍自己做的网站
  • 学做古装网站注释网站开发
  • 网站设计 珠海建设一个商城网站的成本
  • 安徽龙山建设网站wordpress添加微信好友
  • h5商城网站是什么意思json取数据做网站
  • 深圳做网站哪家最好可以做描文本的网站
  • 做一家新闻媒体网站多少钱做360网站优化排
  • 凡科建站登录官网百度推广要不要建网站
  • 太阳能灯网站建设网站建设设计作品怎么写
  • 网站的底部导航栏怎么做防水补漏东莞网站建设
  • 制作网站问题和解决方法建设网站银行
  • 国外做网站卖东西要什么条件乌兰察布盟建设银行网站
  • 微山建设局网站网站和数据库
  • 网站展示型和营销型有什么区别百度站长seo
  • 做景区网站建设的公司携程企业网站建设的思路
  • 精品网站建设费用磐石网络名气优秀的设计
  • 网站开发费会计处理厚瑜珠海网站建设