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


    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 count
    0
    输出 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没有看清楚空格数量

  • 相关阅读:
    微软忘记修复Mac Office2004/2008安全漏洞 狼人:
    资深黑客谈:安全趋势正在向应用层发展 狼人:
    Web应用防火墙之前世今生 狼人:
    RSA技术总监Bill Duane:安全正因云而改变 狼人:
    微软11月将发布3个补丁 修复11处漏洞 狼人:
    选择透明在按钮上添加图片
    企业组织不管你学的是什么专业,你都应该多少懂些管理学的东西
    最大数组连续子向量的最大和
    异步请求再探异步 ASP.NET 页
    谷歌平台谷歌将推安卓游戏中心 整合社交挖角iOS
  • 原文地址:https://www.cnblogs.com/qsls8643/p/10747220.html
Copyright © 2020-2023  润新知