Data_Structure03-栈和队列

一、学习总结


1、写出你认为本周学习中比较重要的知识点关键词

·抽象数据类型
·栈和队列

2、思维导图

二、PTA实验作业


选题:

1、7-1 jmu-字符串是否对称(20 分)
2、7-4(选做) 列车厢调度(25 分)
3、7-2 银行业务队列简单模拟(25 分)

题目1:7-1 jmu-字符串是否对称

1、设计思路

#头文件
int main(){
	定义字符串 c;
	输入字符串;
	定义字符型栈ch;
	定义整型变量 len,i,a;
	len <- c.size();
	i <- 0;
	a <- len%2;
	if  !a 		//偶数个 
		then while i小于len 
			do if i小于len/2 //进栈
				then c[i]进栈
			elseif c[i]等于栈顶
				then 栈顶出栈
			else 
				then 输出no
				return 0;
			i++;
			end	
	else	//奇数个 
		then while i小于len
			do if i小于len/2  //进栈
				then c[i]进栈
			elseif c[i]等于栈顶
				then 栈顶出栈
			else 
				then 输出no
				return 0;
			if i等于len/2-1 
				then i++; 
			i++;
			end
	
	输出yes
	return 0;
} 

2、代码截图


3、PTA提交列表说明

编译错误:把编译器改成C++;
运行超时:一开始我是输入一个字符则进栈一个字符,结果运行超时,后来,修改成一次性输入字符串在进行判断。

题目2:7-4(选做) 列车厢调度

1、设计思路

#头文件
int main(){
	定义整型变量 i<-0,j<-0;
	定义字符型数组 a,b,res,res2;
	定义字符型栈s;//用于储存轨道3的列车
	输入 a,b;
	while a[i]
		do if a[i]==b[j]
			then res[j++]<-a[i];
			i++;
			continue;
		while s不为空&&s栈顶不等于b[j]
			do res[j]<-b[j]
			j++;
			删除栈顶
			end
		if a[i]不等于b[j]
			then a[i]进栈
			i++
		end
	//将轨道3上的列车全部移向轨道2
	while 栈s不为空
		do res[j++]<-栈顶
		删除栈顶
		end
	if res与b不同
		then 输出“Are you kidding me?"
		return 0;
	i<-j<-0;
	//如果res与b相同,则重复上述操作输出操作序列
	while a[i]
		do if a[i]==b[j]
			then res2[j++]<-a[i];
			i++;
			输出 "1->2" 且换行
			continue;
		while s不为空&&s栈顶不等于b[j]
			do res2[j]<-b[j]
			j++;
			输出 "3->2" 且换行
			删除栈顶
			end
		if a[i]不等于b[j]
			输出 "1->3" 且换行
			then a[i]进栈
			i++
		end
	while 栈s不为空
		do res2[j++]<-栈顶
		删除栈顶
		输出 "3->2" 且换行
		end
	return 0;
}

2、代码截图



3、PTA提交列表说明

编译错误:代码中使用了gets()来输入字符串,头文件中的定义中没有,后来改用头文件#include <bits/stdc++.h>  ,该头文件包括了所有的头文件,不用写太多的头文件

题目3:7-2 银行业务队列简单模拟

1、设计思路

#头文件
int main(){
	定义整型变量 temp,n,i<-0;
	输入n;
	定义队列A,B;
	for i<-0 to n 
		do 输入temp
		if temp为奇数
			then 进A队列
		else //temp为偶数
			then 进B队列
	end
	//为了输出中间的空格,先输出一个
	if A队列不为空
		then 输出A队列头
		删除A队列头
		i++
	else
		then 输出B队列头
		删除B队列头
	while A队列不为空并且B队列不为空
		do i++;
		if i%2
			then if A队列不为空
				then 输出” ”和A的队列头
				删除A队列头
			else
				if A队列不为空
					then 输出” ”和A的队列头
					删除A队列头
				if B
					then 输出” ”和B的队列头
					删除B队列头
	end
	输出回车
	return 0;
}

2、代码截图


3、PTA提交列表说明

编译错误:编译器为改成C++
部分正确:在输出第一个元素的时候,在B队列那里输出完后没有删除

三、本周题目集的PTA最后排名


1、栈PTA排名

2、队列PTA排名

3、我的总分:2.5

四、阅读代码

码云地址



功能:实现多项式A与多项式B的相除并输出商和余
优点:逻辑结构清晰,易于阅读;代码简洁;

五、代码Git提交记录截图


posted @ 2018-04-07 20:53  兰翔  阅读(287)  评论(2编辑  收藏  举报