1.学习总结
栈只能在同一端进行入栈出栈操作(FILO),而队列是在一端入队,在另一端出队(FIFO)。
查找了一些算法,灰色部分是目前还未接触过的算法
2.PTA实验作业
2.1.1 题目1:字符串是否对称
2.1.2 设计思路
定义变量X,数组a[]存放数据;
定义变量N=0,i控制循环,记录元素个数;
定义栈S;
输入字符串,并记录字符串的大小N;
以N为栈的最大容纳量创建栈S;
for i=0 to N
字符串进入栈;
end for
for i=0 to a[i]!=\'\\0\'
X=S出栈的数值;
if a[i]与X不相等
输出"no",并结束程序;
end for
输出 “yes”;
2.1.3 代码截图
2.1.4 PTA提交列表说明
一开始因为C/C++部分操作弄混了,修改后第二个测试点对了,但是第一个一直不对,以为是数组设置的不够大,但是在我增大到让程序运行超时时仍然不正确,也让其他同学替我看了,找不到到底错在哪,但题目给的样例能正确输出。
2.2.1 题目2:符号配对
2.2.2 设计思路
定义栈S;
定义自变量flag=1作为正误判断标志,i控制循环,len记录字符串长度;
定义变量s[100000],X,e记录数据;
初始化栈S;
while(1)
{
输入字符串s;
if s[0]为\'.\'并且s[1]为0 退出循环;
len = 字符串s的长度;
栈S的大小Size加上len;
for i=0 to s[i]!=\'\\0\'
if s[i]为\'/\' 或\'[\' 或\'{\'
s[i]入栈;
else if s[i]为\'/\'并且s[i+1]为\'*\' 且 i+1<len
令\'<\'进栈; //用\'<\'代替\' /* \'
else if s[i] == \')\'
if 栈不空
if S栈顶的元素为 \'(\'
出栈;
else if 栈空或不匹配
输出"NO""?-)"并退出程序;
else if s[i] == \']\'
if 栈不空
if S栈顶的元素为 \'[\'
出栈;
else if 栈空或不匹配
输出"NO""?-]"并退出程序;
else if s[i] == \'}\'
if 栈不空
if S栈顶的元素为 \'{\'
出栈;
else if 栈空或不匹配
输出"NO""?-}"并退出程序;
else if s[i] == \'*\',s[i+1]==\'/\' 且 i+1<字符串长度
i++;
if 栈不空
if S栈顶的元素为 \'<\'
出栈;
else if 栈空或不匹配
输出"NO""?-*/"并退出程序;
end for
}
if 栈内无右括号与之匹配
输出"左括号-?";
else 括号全部能匹配
输出"YES";
2.2.3 代码截图
2.2.4 PTA提交列表说明
经过漫长的编写,测试后发现题目给的sample3输出结果不对,调试后找到了问题:我采取的是在一开始先录入所有的数据,直到收到\'.\'和\'\\n\',但是第三个样例中这样输入会导致后面的数据不能进入数组,造成结果错误,所以我改变了数据输入的方式,也的确对了,但是第六个测试点“左右符号个数相同,达到最大值,但不匹配”不明白是什么意思,也没办法找数据测试。
2.3.1 题目3:银行业务队列简单模拟
2.3.2 设计思路
定义变量N记录总人数,n为顾客编号;
定义变量i控制循环,na,nb为格子队列的元素数,e记录出队元素,数组a[1000]记录完成业务的顾客编号;
定义并初始化队列QA,QB;
输入N;
if N>0
{
循环N次,按奇偶将顾客编号放入不同的队列中;
i=0;flag=1;
循环N次
if flag==1且QA不为空
QA连续两次出队列,并将编号记录在数组a中;
if QB不为空 flag=0;
else
QB出队一次,记录出队的编号;
if QA不为空 flag=1;
for i=0 to N-1
输出a[i]+" "
end for
输出a[i]
}
2.3.3 代码截图
2.3.4 PTA提交列表说明
- 第一次提交时只有第一个测试点(题目给的样例)正确,经过调试后对代码进行了修改
修改前:
修改后:
-
1.无论是na还是nb,当其为0时皆表示队列中没有元素存在,边界情况应该注意这一点;
-
2.建立在上面那一点错误的情况下的错误。考虑到flag的初始值为1,而变为0是在flag==1的前提下,若是将QB出队的条件限制太多,反而不能够成功让QB队列中的元素出队。
3.截图本周题目集的PTA最后排名
3.1栈的PTA排名
3.2队列的PTA排名
总分:128分
4. 阅读代码
将十进制数转为任意进制的数
原地址:{https://blog.csdn.net/qianqin_2014/article/details/51031090}
该段代码可将输入的十进制数转化为自定义的进制数
优点:以前做进制转化可能还要考虑输出数的顺序、考虑放入数组的顺序,但是使用栈,直接将转化后的数逐个进栈再全部出栈,不必考虑顺序的问题。一个简单的代码体现了栈的特点。
5. 代码Git提交记录截图
emmm...下次应该一次提交一个代码的