软件技术基础栈队列二叉树的应用.docx

上传人:b****2 文档编号:24189962 上传时间:2023-05-25 格式:DOCX 页数:12 大小:43.87KB
下载 相关 举报
软件技术基础栈队列二叉树的应用.docx_第1页
第1页 / 共12页
软件技术基础栈队列二叉树的应用.docx_第2页
第2页 / 共12页
软件技术基础栈队列二叉树的应用.docx_第3页
第3页 / 共12页
软件技术基础栈队列二叉树的应用.docx_第4页
第4页 / 共12页
软件技术基础栈队列二叉树的应用.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

软件技术基础栈队列二叉树的应用.docx

《软件技术基础栈队列二叉树的应用.docx》由会员分享,可在线阅读,更多相关《软件技术基础栈队列二叉树的应用.docx(12页珍藏版)》请在冰豆网上搜索。

软件技术基础栈队列二叉树的应用.docx

软件技术基础栈队列二叉树的应用

软件技术基础相关实验

实验名称:

栈的应用

一、实验目的:

掌握顺序栈和链式栈的定义和运算,了解它们的应用。

二、实验要求:

1、掌握顺序栈的定义、特点及常见算法。

2、掌握链式栈的定义、特点及常见算法。

3、参照给定的栈的程序样例,验证给出的栈的常见算法。

4、提交实验报告,报告内容包括:

目的、要求、算法描述、程序结构、主要变量说明、程序清单、调试情况、设计技巧、心得体会。

三、实验内容:

1、顺序栈的操作和测试。

要求:

设计一个主函数实现对顺序栈进行操作测试。

测试方法为:

依次把数据元素1,3,5,7,9入栈,并显示入栈结果;接着依次出栈其中的数据元素并在屏幕上显示。

2、链式栈的操作。

设计一个主函数实现对链式栈进行操作测试。

测试方法为:

依次把数据元素3,6,9,12,15入栈,并显示入栈结果;接着依次出栈其中的数据元素并在屏幕上显示。

3、栈的应用。

利用顺序栈求解表达式(a+b)*(c-d)的值。

四、程序要求:

1、顺序栈的长度自行确定。

2、重点理解栈的算法思想,能够根据实际情况选择合适的存储结构。

3、写出完整的程序并能调试通过。

五、实验结果:

入栈一个元素:

删除一个元素:

取栈顶元素:

退出

六、实验中遇到的问题及解决方法:

栈的操作有了前面的基础,相对而言能够编写出来,遇到的问题还是地址操作相关的,通过不断的练习对于指针对于地址传递应该说有了比较好的理解。

附:

源程序(自行编写或修改的程序。

若为修改程序请注明修改部分的功能,若为书上实例则可不附。

#include"stdio.h"

#include"stdlib.h"

#include"string.h"

#defineMAXNUM20

#defineElemTypeint

/*定义顺序栈的存储结构*/

typedefstruct

{ ElemTypestack[MAXNUM];

inttop;

}SqStack;

/*初始化顺序栈*/

voidInitStack(SqStack*p)

{

if(!

p)

printf("内存分配失败!

");

p->top=-1;

}

/*入栈*/

voidPush(SqStack*p,ElemTypex)

{

if(p->top

{

p->top=p->top+1;

p->stack[p->top]=x;  

}  

else

printf("Overflow!

\n");  

}

/*出栈*/

ElemTypePop(SqStack*p)

{

ElemTypex;

if(p->top>=0)

{

x=p->stack[p->top];

printf("以前的栈顶数据元素%d已经被删除!

\n",p->stack[p->top]);

p->top=p->top-1;

returnx;

}

else

{

printf("Underflow!

\n");

return(0);

}

}

/*获取栈顶元素*/

ElemTypeGetTop(SqStack*p)

{

ElemTypex;

if(p->top>=0)

{

x=p->stack[p->top];printf("\n栈顶元素为:

%d\n",x);

returnx;

}

else

{

printf("Underflow!

\n");

return0;

}

}

/*遍历顺序栈*/

voidOutStack(SqStack*p)

{

inti;

printf("\n");

if(p->top<0)

printf("这是一个空栈!

");

printf("\n");

for(i=p->top;i>=0;i--)

printf("第%d个数据元素是:

%6d\n",i,p->stack[i]);

}

/*主函数*/

voidmain()

{

SqStack*q;

intcord;ElemTypea;

printf("第一次使用必须初始化!

\n");

do{

printf("\n-----------主菜单-----------");

printf("\n  1  初始化顺序栈 ");

printf("\n  2  插入一个元素 ");

printf("\n  3  删除栈顶元素 ");

printf("\n  4  取栈顶元素  ");

printf("\n  5  置空顺序栈  ");

printf("\n  6  结束程序运行 ");

printf("\n----------------------------");

printf("\n请输入指令");

scanf("%d",&cord);

printf("\n");

switch(cord)

{

case1:

{

q=(SqStack*)malloc(sizeof(SqStack));

InitStack(q);

OutStack(q);

}break;

case2:

{

printf("请输入要插入的数据元素:

a=");

scanf("%d",&a);

Push(q,a);

OutStack(q);  

}break;

case3:

{

Pop(q);

OutStack(q);

}break;

case4:

{

GetTop(q);

OutStack(q);

}break;

case5:

{

 

printf("\n顺序栈被置空!

\n");

OutStack(q);

}break;

case6:

exit(0);

}

}while(cord<=6);

}

实验名称:

队列的应用

一、实验目的:

掌握循环队列和链队列的定义及其基本运算,了解并熟悉队列的应用。

二、实验要求:

1、掌握循环队列和链队列的特点及常见算法。

2、参照给定的循环队列和链队列的程序样例,验证给出的队列的常见算法。

3、能对队列进行简单的应用。

4、提交实验报告,报告内容包括:

目的、要求、算法描述、程序结构、主要变量说明、程序清单、调试情况、设计技巧、心得体会。

三、实验内容:

1、循环队列的基本操作。

要求:

设计一个主函数对循环队列进行测试。

主要功能有:

入队操作、出队操作、取对头元素。

2、链队列的基本操作。

要求:

设计一个主函数对链队列进行测试。

主要功能有:

链队列的初始化、求队列的长度、入队列操作、出队列操作、取对头元素。

3、对队列进行简单的应用。

四、程序要求:

1、能用数字化菜单的方式选择队列的各项操作。

2、循环队列中选择入队或出队时能一次入队或出队多个数据。

3、程序具有一定的防误操作性,能处理常见的突发事件。

4、写出完整的程序并能调试通过。

五、实验结果:

1、创建队列进行入队操作

2、出对操作,根据先进先出原理,一次出队

3、取出队头元素

4、判断队列是不是空队列

5将队列置空

六、实验心得体会:

通过本次实验,让我了解了队列的一些操作,掌握了队列编程的技巧。

学会了循环队列的算法。

队列的操作在计算机领域应用较为广泛,通过队列的学习也让我了解到了一些队列相关的应用,让我对于计算机操作系统的任务控制也有了一定的了解。

先进先出的模式在生活中也十分常见,有了队列可以解决很多的实际难题,队列的知识需要我们掌握。

附:

源程序(自行编写或修改的程序。

若为修改程序请注明修改部分的功能,若为书上实例则可不附。

#include

#include

typedefintboolean;

#definetrue1

#definefalse0

typedefstructqueue{

intelement[10];

intrear;

intfront;

}*Squeue,Queue;

voidEnqueue(Squeueq);//入队操作

voidDequeue(Squeueq);//出队操作

voidGetfront(Squeueq);//取对头元素

booleanIsEmpty(Squeueq);//判断是否为空

voidEnEmpty(Squeueq);//使队列置空

voidmain()

{

intinput;

Squeueq;

q=(Squeue)malloc(sizeof(Queue));

q->front=0;

q->rear=-1;

printf("================循环队列================\n");

printf("       1. 入队操作\n");

printf("       2. 出队操作\n");

printf("       3. 取对头元素\n");

printf("       4. 判断队列是否为空\n");

printf("       5. 置空队列\n");

printf("========================================\n");

do

{

printf("请输入您的操作:

");

scanf("%d",&input);

switch(input)

{

case1:

{

Enqueue(q);

}break;

case2:

{

Dequeue(q);

}break;

case3:

{

Getfront(q);

}break;

case4:

{

if(IsEmpty(q))

printf("不存在该队列\n");

else

printf("存在该队列\n");

}break;

case5:

{

EnEmpty(q);

}break;

}

}while(input<=5);

}

voidEnqueue(Squeueq)

{

intnum,i=0,record=0;

printf("请输入您想入队的元素个数(一次队列存在不超过10个数据):

");

scanf("%d",&num);

for(i;i

{

printf("请输入第%d个元素:

",i+1);

if(++q->rear<=9)

{

if(q->rear==q->front&&record==1)

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1