刷题数三,
菜鸟杯补题2;
启航栈1;
终于知道这两天为什么这么痛苦了
我一度难受到窒息因为我看的是链栈我看了两天硬是对这些题目无从下手,因为他吧指针 结构体 链表 栈一起结合起来使用 我去搜各种博客自学 每个人的写法都不一样 一会跟我解释这个是这个意思那个是那个是那个意思我完全看不懂真的人都傻了 我一度躲在被窝里抽泣思考着我这么折磨自己的意义是什么,直到廖诗雨跟我说这些题目我们的水平只能用堆栈才好做我才豁然开朗,
所谓栈就是一个被阉割了的数组,他的数据只能从栈顶进入和弹出所以栈顶是关键,今天终于是做出了一个题目 交了三个只对了一个 ,不过已经能写出来了是一种进步了,看下面这个题目我的思维,我的伪代码标注着对栈的理解
#include<stdio.h>
int main()
{
while(1)
{
int i;
int top=0;
int b[100],a[100];
int n;
scanf("%d",&n);
if(n==0)
{
break;
}
for(i=0;i<n;i++)
{
scanf("%d",&b[i]);//先输入出栈顺序
}
int z=0;
for(i=1;i<=n;i++)
{
a[++top]=i;//这是入栈顺序 top代表每个值的下标
if(a[top]==b[z])//当出栈的数等于当前栈顶的数时就出栈。
{
top--;//一个数出栈后栈顶要减一代表栈的容量少了一个已经出去了,
z++;//开始判断下一个出栈数
while(a[top]==b[z]&&top)//如果出栈后作为新栈顶的数等于出栈数并且栈不是空栈就让他出栈。
{
top--;//栈容量减一
z++;//开始判断下一个出栈数
}
}
}
if(top==0)//如果是一个合法出栈序列的话栈内所有的元素可以全部出去即栈容量为0,即top=0;
{
printf("Yes\n");
}
else
{
printf("No\n");//给出的样例能出栈的元素只有四和五,此时栈容量为三,所以这不是一个合法的出栈序列
}
}
return 0;
}
虽然是在廖神仙的帮助下写出来的,但是自己写出思维也小有了一点成就感,希望自己还能挺过这一轮吧,加油!
纵使结局不如意,放弃实属下下签。