数据结构栈和队列实验报告
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验内容:编译以下题目的程序并调试运行。
1)、编写一个程序,实现顺序栈的各种基本运算,并在此基础上设计一个 主程序并完成如下功能:
(1)初始化栈 s;
(2)判断栈 s 是否非空;
(3)依次进栈元素 a,b,c,d,e;
(4)判断栈 s 是否非空;
(5)输出出栈序列;
(6)判断栈 s 是否非空;
(7)释放栈。
一、实验目的和要求 (1)理解栈和队列的特征以及它们之间的差异,知道在何时使用那种数据结 构。 (2)重点掌握在顺序栈上和链栈上实现栈的基本运算算法,注意栈满和栈空 的条件。 (3)重点掌握在顺序队上和链队上实现队列的基本运算算法,注意循环队队 列满和队空的条件。 (4)灵活运用栈和队列这两种数据结构解决一些综合应用问题。
//数据域
struct linknode *next; //指针域
GetTop(SqStack *s,ElemType &e)
//取栈顶元素
对应的程序如下:
//文件名: #include <> #include <> #define MaxSize 100 typedef char ElemType;
ElemType data[MaxSize];
int top;
(5)输出链栈长度;
(6)输出从栈底到栈顶元
素;
(7)输出出队序列;
(8)判断链栈 s 是否非空;
图
Proj3_2 工程组成
(9)释放队列。
本工程 Proj3_2 的组成结构如图所示。本工程的模块结构如图所示。图中 方框表示函数,方框中指出函数名,箭头方向表示函数间的调用关系。
main
InitSt ack
//栈顶指针
} SqStack;
void InitStack(SqStack *&s)
//初始化栈 S
ቤተ መጻሕፍቲ ባይዱ
{ s=(SqStack *)malloc(sizeof(SqStack));
s->top=-1;
//栈顶指针置为-1
}
void DestroyStack(SqStack *&s) //销毁栈 s
{
ElemType e; SqStack *s; printf("栈 s 的基本运算如下:\n");
运行结果如下:
2)、编写一个程序,实现链栈的各种基本运算,并在此基础上设计一个主 程序并完成如下功能:
(1)初始化链栈 s;
(2)判断链栈 s 是否非空;
(3)依次进栈 a,b,c,d,e;
(4)判断链栈 s 是否非空;
如发现有错,及时改正。 ④ 进行编译和连接。如果在编译和连接过程中发现错误,频幕上会出现“报
错信息”,根据提示找到出错位置和原因,加以改正。再进行编译,如 此反复直到不出错为止。 ⑤ 运行程序并分析运行结果是否合理。在运行是要注意当输入不同的数据
时所得结果是否正确,应运行多次,分别检查在不同情况下结果是否正 确。
Push(LiStack *&s,ElemType e) //进栈
Pop(LiStack *&s,ElemType &e) //出栈
GetTop(LiStack *s,ElemType &e)//取栈顶元素
对应的程序如下:
//文件名: #include <> #include <>
ElemType data;
sh
op
其中包含如下函数:
InitStack(SqStack *&s) //初始化栈 S
DestroyStack(SqStack *&s) //销毁栈 s
StackEmpty(SqStack *s) //判断栈空
Push(SqStack *&s,ElemType e) //进栈
Pop(SqStack *&s,ElemType &e) //出栈
DestroySt StackEmpt Pu Pop ack图 Proj3_2y工程的程序结s构h 图
其中包含如下函数:
GetT op
InitStack(LiStack *&s) //初始化栈 s
DestroyStack(LiStack *&s) //销毁栈
StackEmpty(LiStack *s) //判断栈是否为空
free(s);
}
bool StackEmpty(SqStack *s)
//判断栈空
{ 设计程序如下
return(s->top==-1);
}
bool Push(SqStack *&s,ElemType e) //进栈
{ if (s->top==MaxSize-1) //栈满的情况,即栈上溢出
//文件名: #include <> #include <> #defEilneemTMyapxeSidzaeta1[0Ma0xSize]; typeidnetftcohpa;r Ele/m/T栈yp顶e;指针 }tySpqeSdteafcks;truct e{xtern void InitStack(SqStack *&s); extern void DestroyStack(SqStack *&s); extern bool StackEmpty(SqStack *s); extern bool Push(SqStack *&s,ElemType e); extern bool Pop(SqStack *&s,ElemType &e); extern bool GetTop(SqStack *s,ElemType &e); void main() {
二、实验环境和方法 实验方法:
(一)综合运用课本所学的知识,用不同的算法实现在不同的程序功能。 (二)结合指导老师的指导,解决程序中的问题,正确解决实际中存在的异 常情况,逐步改善功能。 (三)根据实验内容,编译程序。 实验环境:Windows xp Visual C++ 三、实验内容及过程描述
实验步骤: ① 进入 Visual C++ 集成环境。 ② 输入自己编好的程序。 ③ 检查一遍已输入的程序是否有错(包括输入时输错的和编程中的错误),
图 Proj3_1 工程组成
本工程 Proj3_1 的组成结构如图所示。本工程的模块结构如图所示。图中 方框表示函数,方框中指出函数名,箭头方向表示函数间的调用关系。
main
InitSt DestroySt StackEmpt Pu Pop GetT
图ackProj3_1 a工ck程的程序结构y图