独清独醒

举世皆浊我独清,众人皆醉我独醒。

实验报告二——栈与队列的实现及其应用

一、思考题

如何在“表达式计算程序”中增加一个针对输入表达式进行判别的函数,对表达式中可能存在的括号不匹配、除数为0等错误给出提示,并通过修改主函数允许重新输入?

答:计算的时候,对除法判定时用

if(d2==0);
printf("错误");
else dr=d1/d2;
break;

可以在符号出栈的时候加个程序,使其统计(个数,和)个数并比较,若相同则继续,若不相同则返回初始位置,栈清空重新输入。

如何修改“杨辉三角形输出程序”,将顺序队列存储结构替换为链队列结构?

把顺序表的初始化和定义改成

Typedef int datatype;
Typedef struct SQueue{
QElemType data;
Truct SQueue*next;
}SQueue;
Typedef struct
{
SQueue *front;
SQueue *rear;
}LinkSQueue;

然后构造一个空队列:

LinkQueue *InitQueue(LinkQueue *q)
{
    q->front = q->rear =(QNode*)malloc(sizeof(QNode));
    q->front->next = NULL;
    return q;
}

然后再把其余地方用顺序表输入输出的地方的函数改为链表式。

如何改进“停车场管理的简单模拟”程序,使每辆车到达及离开的时间精确到分钟,并且保证输入的时间数据按小时递增有序?

答:在计算时间的部分,设计一个初始时间精确到分,并且采用60进制。

比如设a为小时部分,b为分钟部分。在此之前先对停车的时间进行记录并记为x分钟,

b=b+x;
If(b>60)
{
    b=b-60;
    a=a+1;
}

再将这些数据记录到一个顺序表中,并进行从大到小的排序,再输出遍历显示即可。

分析迷宫问题中两种算法的不同思想,并说明“迷宫问题”中程序是如何记住可行线路的?

答:通过把每个走过的路径的位置坐标存储在一个栈中,如果可以往下走并能够走出迷宫,则存储路径,如果无法往下走则返回上一步并且删除该位置的坐标元素在栈中的存储。利用位置坐标x,y来进行存储辨识以及后来的输出。

二、实验体会

通过本次实验了解了栈和队列的各种功能及应用。增长了这种算法相关程序的编写。

点赞

发表评论

邮箱地址不会被公开。 必填项已用*标注