1.本周学习总结
栈和队列也是线性表,因为对栈和队列的增删操作是有一定限制的,所以,栈和队列是操作受限的线性表。
栈和队列差不多可以这么理解吧。(栈是一头封口的球筒,队列是两头通气的球筒)
栈就是只有一头可以出入的线性表
———————————————————
----->#!@#!¥@¥#!¥#¥¥#!##||堵死
———————————————————
队列是两头都可以出入的线性表。
———————————————————
----->#!@#!¥@¥#!¥#¥¥#!##<-----
———————————————————
其次,c++STL包装过的stack和queue容器真的很好用,不过,不依靠容器对栈和队列进行操作也是必须的。
2.PTA实验作业
2.1舞伴问题
假设在周末舞会上,男士和女士们分别进入舞厅,各自排成一队。跳舞开始,依次从男队和女队队头各出一人配成舞伴,若两队初始人数不同,则较长那一队未配对者等待下一轮舞曲。现要求写一算法模拟上述舞伴配对问题。 你需要用队列操作实现上述算法。请完成下面5个函数的操作。
2.1.1设计思路
QueueLen(SqQueue Q)
计算队列长度
尾指针-头指针
EnQueue(SqQueue &Q, Person e)
入队(入队从队尾入)
if 尾指针+1头指针
队满,入队失败
else 队不满
尾指针+1;
e赋给尾指针指向
QueueEmpty(SqQueue &Q)
if 尾指针头指针
队空 返回1
else 队不空 返回0
DeQueue(SqQueue &Q, Person &e)
判断是否队空
队空返回0
队不空
出队(出头)
头指针+1
头指针指向赋给e
返回1
DancePartner(Person dancer[], int num)
Person p;//临时记录人员
for i=0 to num
p=dancer[i]
if p为女
加入女舞者队列
else p为男
加入男舞者队列
end if
while 男女两队列都不空
女队列出队,输出name
男队列出队,输出name
end while
2.1.2代码截图
2.1.3本题PTA提交列表说明
2.2另类循环队列
如果用一个循环数组表示队列,并且只设队列头指针Front,不设尾指针Rear,而是另设Count记录队列中元素个数。请编写算法实现队列的入队和出队操作。
2.2.1设计思路
AddQ入队操作
if countmaxsize //如果队内元素等于最大值,队满
输出Queue Full
return false
else
count++//队内元素数+1
/尾指针rear = (front +count)%MaxSize/
X赋给尾指针指向元素
返回 true
end if
DeleteQ出队操作
出队不动尾指针,和正常的一样
if count0
输出 Queue Empty
返回ERROR
else
count--
头指针+1
返回头指针指向元素
2.2.2代码截图
2.2.3本题PTA提交列表说明
2.3报数游戏
报数游戏是这样的:有n个人围成一圈,按顺序从1到n编好号。从第一个人开始报数,报到m(m<n)的人退出圈子;下一个人从1开始报数,报到m的人退出圈子。如此下去,直到留下最后一个人。其中n是初始人数;m是游戏规定的退出位次(保证为小于n的正整数)。要求用队列结构完成。输出数字间以空格分隔,但结尾不能有多余空格。
2.3.1设计思路
容器操作
把n个数据按顺序进队
num记录队中剩余的元素数
队列的循环通过while循环实现,
每次将队头元素出队,再入队尾
while循环的同时,用i来表示报数号
当i等于m时,队头出队不如队,输出队头
i重置
当队内元素为0时,停止循环
2.3.2代码截图
2.3.3本题PTA提交列表说明
2.4符号配对
请编写程序检查C语言源程序中下列符号是否配对:/与/、(与)、[与]、{与}。
2.4.1
输入一段字符串//要在scanf("%s",str)之外要用一个while(1)套上解决输入时的回车问题
遍历字符串
遇到左符号入栈//遇到‘/*’,用‘<’代替,这样可以减少入栈出栈操作
遇到右括号与栈顶元素查看是否配对,
如果配对,就栈顶元素出栈,
否则,出循环,输出NO,判断栈是否为空,输出对应栈顶元素
2.4.2代码截图
2.4.3本题PTA提交列表说明
栈和队列上机考试
1选择题1
英语差不多能蒙个差不多,就是没有注意*优先级大于+的出栈问题,属于低级错误
2表达式求值
输入一个后缀表达式,程序求出表达式值。
错误代码
就输出了一句在被除数为0的时候的那句表达式错误
修改代码(PS.这个修改代码是考完试之后写的,还存在着错误)
又改了一遍的代码
顺便把if-else结构改成了switch语句
隐藏大括号内的代码
可能是因为上学期计算游戏做的不好吧,在结果处理上滥用result,
在这种栈处理的表达式求值上,,每次要算的数值不一定都和result有关系,还是直接动X比较稳妥吧。
总是在细节上犯很大的错误,还有上次考试是把Stack拼成Stcak,这个错还改了好久,PTA没有看清楚空格数量