栈
1.学习总结(2分)
7-2 队列 银行业务队列简单模拟(25 分)
2.2 设计思路(伪代码或流程图)
- 1.伪代码尽量文字描述,请用下面markdown符号渲染。
- 2.伪代码不要翻译代码,用文字简洁描述代码思路。
- 3.不需要写每个函数,主功能函数的伪代码设计即可
- 4.伪代码若是过于复杂如对代码翻译等,扣分。
定义结构体指针 L1,L2
定义整型 n,k,e,j=0,i;
为L1和L2申请空间
L1->front=L1->rear=0;
L2->front=L2->rear=0;
输入n值
for i=0 to i<n
输入k值
如果k是奇数则进入L1
如果k是偶数则进入L2
当L1和L2只要有一个不为空
L1非空时 L1的两个数出栈并输出这两个数
L2非空时 L2的一个数出栈并输出这个数
2.3 代码截图(注意,截图、截图、截图。代码不要粘贴博客上。不用用···语法去渲染)
2.4 PTA提交列表说明。
- 1本题基本没什么问题
栈7-1
2.2 设计思路(伪代码或流程图)
- 1.伪代码尽量文字描述,请用下面markdown符号渲染。
- 2.伪代码不要翻译代码,用文字简洁描述代码思路。
- 3.不需要写每个函数,主功能函数的伪代码设计即可
- 4.伪代码若是过于复杂如对代码翻译等,扣分。
定义结构体指针L 定义i,flag=0;
定义结构体e
定义字符串数组str
为L申请空间
为L的结构体成员data申请空间
令L->Top等于-1
输入str的值
for i=0 to str[i]!=0
把str字符串输入栈
end for
for i=0 to str[i]!=0
把str字符串一个个出栈
如果 str[i]!=e flag=1;退出循环
end for
如果flag==1,输出no
否则输出yes
2.3 代码截图(注意,截图、截图、截图。代码不要粘贴博客上。不用用···语法去渲染)
2.4 PTA提交列表说明。
- 1.开始时PTA提醒e的值无效,才发现e作为实参,在PoP函数中虽然它的形参改变了,但是对main 主函数中的e无任何影响,于是想到用C++的引用调用的方法,在定义函数时在其前加了一个&引用调用符号就答案正确了;
提交列表:
栈7-4
2.2 设计思路(伪代码或流程图)
- 1.伪代码尽量文字描述,请用下面markdown符号渲染。
- 2.伪代码不要翻译代码,用文字简洁描述代码思路。
- 3.不需要写每个函数,主功能函数的伪代码设计即可
- 4.伪代码若是过于复杂如对代码翻译等,扣分。
定义结构体L
定义i=0,k,j,l flag=1
定义s1[100],s[10000],s2[10000],s3[10000]
定义Top1,Top2,Top3分别记录当前3个栈的容量 Top4记录s的容量 Top4=0; Top1=0; Top2=strlen(s); Top=strlen(s)-1; Top3=-1
输入s1和s的字符串的值
while Top>=0
如果s1[Top1]==s[Top] Top2和Top自减; s2[Top2]等于s1[Top1]; Top1和Top4自增; L[i].x=1;x和y用于记录元素从哪儿到哪儿 L[i].y=2; i自增;
否则如果s3[Top3]==s[Top4] s2[Top2]等于s3[Top3]; Top2和Top3自减; Top4自增; L[i].x=3;x和y用于记录元素从哪儿到哪儿 L[i].y=2; i自增;
否则 Top3和Top4自增; s3[Top3]等于s1[Top]; Top自减; L[i].x=1;x和y用于记录元素从哪儿到哪儿 L[i].y=3; i自增;
end while
l等于Top3; Top2自减;
for j=0 j<=l
如果s3[Top3]!=s[Top2] flag=0; Top3和Top2自减 ;退出循环
否则 L[i].x=3; L[i].y=2; i自增; Top3和Top2自减;
end for
如果flag==0转移不成功 按次序输出x 和 y的值
否则输出Are you kidding me?
2.3 代码截图(注意,截图、截图、截图。代码不要粘贴博客上。不用用···语法去渲染)
2.4 PTA提交列表说明。
- 1.开始时就是像上图这样写的,后来发现我开始时是把Top3定义成-1,如果像上面这样写则下标变成-1.,显然不可行,所以修改的方案是把上下顺序调换一下就对了
以下是作业不做要求,自己平时记录的错误:
考试题目6-1:
提交列表:
1.首先自己犯了一个致命错误,没好好审题,题目明明说是输入一组有序数,自己却看成了要把输入的数排序,便花了无用的时间写了排序代码,粗心大意要好好反思;
部分正确是因为在InsertList(即插入函数)中,在找到比x大的break之后有一种情况是插入在中间或最前边,另一种情况是插入在最后,而这两种情况所需做的操作是不同的,而我忽略了插入在最后一个位置的情况,所以加上之后就对了,正确答案如下图:
考试题目6-3:
1.这是一个低级错误,开始时忘记加上s=s->next,导致s完全无变化
2.这是一开始只用一个指针变量删除区间的做法,只定义了一个s,然后s后面的后面的结点用s->next->next来表示,但是越写会发现越麻烦,而且会陷入死胡同里,所以后来改成定义两个指针,一个指前面,另一个指后面,然后两个指针同步后移,就可以遍历整个链表,后来的做法如下图所示:
3.调试发现会输出一个类似地址的数字,后来发现是在输出函数中错把第一个数值指向了头指针,所以输出的第一个数是头指针的地址
4.在把删除区间函数注释掉后,调试时发现输出的数并不按全顺序排列,所以在排列函数上找错,后来发现是因为选择排序时原本条件应为if(a[k]>a[j])k=j;自己却写成如上图所示的条件,如果像自己上面那样写会使得k只会记录最后一个比a[i]小的数值,而不是a[i]后面所有数的最小值,改过来排序就正确了;
队列6-1:
1.一开始是写 Q->Data[Q->Count]=X,后来发现这样写会导致删除的位置不准确,比如当MaxSize是6,Front是4,count为3,此时要添加一个数如果用Q->Data[Q->Count]=X就会错误,变成把值赋给下标为4的位置,而事实上应把值赋给下标为1的位置;
队列6-2:
1.这个是返回队列长度的函数,一开始写成return (Q->rear-Q->front)-1,可能是因为受之前写顺序表代码的影响,后来带入数值计算一下,发现不需要减1;
栈6-1
一开始返回值时是写return S->Data[S->Top-1],后来发现main函数中的X即返回值是指出栈的数,所以改成了以上这样就对了
PTA提交列表
栈6-2
1.开始时只记得给结构指针L(S)申请空间,忘记给结构指针中的数组申请空间导致段错误
2.开始时没有减1导致的结果是两数即使相邻判断结果栈也没有满,但实际上栈已经满了,所以应该减1;
3.没有注意题目要求输出的Tag是编号,开始时直接输出Tag导致错误
提交列表: