今天开学搞的我很难受,一堆事忙完后,宿舍还没网。出去租个光猫还被淋了一身雨,回来了发现竟然有伞这就很难受了。没有网无聊的我想学习。。。。这是多么绝望的一句话啊。今天看了下栈与队列。
*栈与队列是最基础的数据结构,先说一下概念吧。
栈:
就是说先进后出后进先出 。就像洗碗,我们洗完碗摞到那就是入栈,把碗放进碗柜就是出栈。栈需要一个计数器或栈顶指针。
以下是代码实现:
int a[1000],count=0;//a为栈 count为计数器
void getin(int x)//入栈 记录入栈元素
{
a[count++]=x;
}
int getin(int x)//出栈 要将出栈的元素输出
{
return a[count–];
}
输入一段数据:1 2 3 4 5 6 7 8
输出可以是
1 2 3 4 5 6 7 8进一个出一个
2 1 3 7 6 5 4 8
8 7 6 5 4 3 2 1全部进栈再出栈
在这里举个例子:
example 1
一个表达式中包括变量、常量、操作符、圆括号,圆括号可以嵌套, 编写程序判断表达式中的括号是否正确匹配。输入任意一个表达式,判断其中括号是否匹配,匹配, 输出YES, 不匹配,输出NO。
样例输入1:
((a+b)*3-4*((c-d)/7))*e
样例输入2:
((a+b)*6)+(c-d)/8)))*e
样例输出1:
YES
样例输出2:
NO
string s;
char a[1000010];
cin>>s;
int count=0;
for(int
i=0;i<s.length();i++)
{
if(s[i]=='(')a[++count]=s[i];
if(s[i]==')')
{
count--;
if(count<0)break;
}
}
if(count!=0)cout
<<"NO"<< endl;
else cout
<<"YES"<< endl;
example 2
描述 Description
栈是常用的一种数据结构,有n个元素在栈顶端一侧等待进栈,栈顶端另一侧是出栈序列。你已经知道栈的操作有两·种:push和pop,前者是将一个元素进栈,后者是将栈顶元素弹出。现在要使用这两种操作,由一个操作序列可以得到一系列的输出序列。请你编程求出对于给定的n,计算并输出由操作数序列1,2,…,n,经过一系列操作可能得到的输出序列总数。
输入格式 Input Format
一个整数n(1<=n<=15)
输出格式 Output Format
一个整数,即可能输出序列的总数目。
Sample:
3
5
可以用栈和递归来写,就像一个二叉树一样有俩条路进栈一个新的出栈一个当count==n则++ 并return
队列:
先进先出后进后出。就像我们去食堂买饭人多要排队一样后来的后刷卡后领饭。队列需要一个头指针和一个尾指针分别记录队头和队尾的地址。
以下是代码实现:
int a[1000],count=0;head=1,tail=0;//a为队列 head为队头 tail为队尾
void getin(int x)//入队 记录入队元素
{
count++;
a[head++]=x;
if(head>n)head=1;//为了防止数组太长一旦过长从头开始记录就像一个环
}
int getin(int x)//出队 要将出队的元素输出
{
count–;
return a[tail++];
if(tail>n)tail=1;
}