DS博客作业03--栈和队列

1.本周学习总结

栈和队列也是线性表,因为对栈和队列的增删操作是有一定限制的,所以,栈和队列是操作受限的线性表。
栈和队列差不多可以这么理解吧。(栈是一头封口的球筒,队列是两头通气的球筒)
1474718-20190421212847910-1197921786.jpg
栈就是只有一头可以出入的线性表
———————————————————
----->#!@#!¥@¥#!¥#¥¥#!##||堵死
———————————————————
队列是两头都可以出入的线性表。
———————————————————
----->#!@#!¥@¥#!¥#¥¥#!##
<-----
———————————————————
其次,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代码截图

1474718-20190421223210878-332250138.png

1474718-20190421223217280-1105458767.png

2.1.3本题PTA提交列表说明

1474718-20190421223949042-1291444439.png

2.2另类循环队列

如果用一个循环数组表示队列,并且只设队列头指针Front,不设尾指针Rear,而是另设Count记录队列中元素个数。请编写算法实现队列的入队和出队操作。

2.2.1设计思路

AddQ入队操作
if count==maxsize //如果队内元素等于最大值,队满
输出Queue Full
return false
else
count++//队内元素数+1
/尾指针rear = (front +count)%MaxSize/
X赋给尾指针指向元素
返回 true
end if
DeleteQ出队操作
出队不动尾指针,和正常的一样
if count==0
输出 Queue Empty
返回ERROR
else
count--
头指针+1
返回头指针指向元素

2.2.2代码截图

1474718-20190421224932683-609153459.png

2.2.3本题PTA提交列表说明

1474718-20190421225307623-1853958127.png

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代码截图

1474718-20190421230605524-1932191234.png

1474718-20190421230625661-1231817033.png

2.3.3本题PTA提交列表说明

1474718-20190422174001644-1122374850.png

2.4符号配对

请编写程序检查C语言源程序中下列符号是否配对://、(与)、[与]、{与}。

2.4.1

输入一段字符串//要在scanf("%s",str)之外要用一个while(1)套上解决输入时的回车问题
遍历字符串
遇到左符号入栈//遇到‘/*’,用‘<’代替,这样可以减少入栈出栈操作
遇到右括号与栈顶元素查看是否配对,
如果配对,就栈顶元素出栈,
否则,出循环,输出NO,判断栈是否为空,输出对应栈顶元素

2.4.2代码截图

1474718-20190421232515211-1137513007.png

1474718-20190421232519829-1801854284.png

1474718-20190421232524854-1632383564.png

1474718-20190421232530214-1684456240.png

1474718-20190421232536378-896274264.png

2.4.3本题PTA提交列表说明

1474718-20190422173349660-1578294690.png

栈和队列上机考试

1选择题1

1474718-20190422161255620-2111657472.png

1474718-20190422172253298-913911719.png

英语差不多能蒙个差不多,就是没有注意*优先级大于+的出栈问题,属于低级错误

2表达式求值

输入一个后缀表达式,程序求出表达式值。

错误代码

就输出了一句在被除数为0的时候的那句表达式错误

修改代码(PS.这个修改代码是考完试之后写的,还存在着错误)

1474718-20190422163840121-1271031590.png

1474718-20190422163844860-155082439.png

1474718-20190422163850117-1865893529.png

1474718-20190422163855027-1088233896.png

又改了一遍的代码

1474718-20190422165651655-222762345.png

1474718-20190422165711109-53556158.png
顺便把if-else结构改成了switch语句

隐藏大括号内的代码

1474718-20190422170222673-1549995265.png

可能是因为上学期计算游戏做的不好吧,在结果处理上滥用result,
在这种栈处理的表达式求值上,,每次要算的数值不一定都和result有关系,还是直接动X比较稳妥吧。
总是在细节上犯很大的错误,还有上次考试是把Stack拼成Stcak,这个错还改了好久,PTA没有看清楚空格数量

转载于:https://www.cnblogs.com/qsls8643/p/10747220.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值