数据结构课程上机实验教学Word格式文档下载.docx

上传人:b****5 文档编号:19669349 上传时间:2023-01-08 格式:DOCX 页数:29 大小:29.46KB
下载 相关 举报
数据结构课程上机实验教学Word格式文档下载.docx_第1页
第1页 / 共29页
数据结构课程上机实验教学Word格式文档下载.docx_第2页
第2页 / 共29页
数据结构课程上机实验教学Word格式文档下载.docx_第3页
第3页 / 共29页
数据结构课程上机实验教学Word格式文档下载.docx_第4页
第4页 / 共29页
数据结构课程上机实验教学Word格式文档下载.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

数据结构课程上机实验教学Word格式文档下载.docx

《数据结构课程上机实验教学Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数据结构课程上机实验教学Word格式文档下载.docx(29页珍藏版)》请在冰豆网上搜索。

数据结构课程上机实验教学Word格式文档下载.docx

1.熟悉C++语言的上机环境,掌握C++语言的基本结构。

2.会定义线性表的顺序存储结构。

(链式存储结构)

3.熟悉对顺序表(单链表)的一些基本操作。

二、实验要求

1.认真阅读和掌握本实验内容所给的全部程序。

2.保存和打印出程序运行结果,并结合程序进行分析。

注意事项:

在做第一次“数据结构”课程实验之前,要在硬盘上建立好自己的工作目录,专门来存储你所做的实验程序及相关信息,以后每次做实验都采用这个目录。

三、实验内容

1、示例(以顺序表为示例,同学们也可以编程实现单链表的创建、查找、插入、删除、求最大最小值等功能)

以输入整形数据为主,输入后按“?

”结束输入。

程序所能表达到的功能为:

实现顺序表的创建、查找、插入、删除等功能。

程序运行后,输入数据并执行。

源程序:

#include"

stdio.h"

conio.h"

#defineMaxSize50

typedefcharelemtype;

typedefstructnode

{

elemtypedata[MaxSize];

intlen;

}lnode,*List;

voidinit(ListL){L->

len=0;

}

intlength(ListL)

{returnL->

len;

elemtypegetnode(ListL,intpos)

if(pos<

1||pos>

L->

len)printf("

error"

);

elsereturnL->

data[pos-1];

intlocate(ListL,elemtypex)

inti=0;

while(i<

len&

&

L->

data[i]!

=x)i++;

if(i==L->

len)return-1;

elsereturn(i+1);

voidinsert(ListL,intpos,elemtypex)

intj;

len+1)printf("

inserterror\n"

else{

len++;

for(j=L->

j>

=pos;

j--) 

data[j]=L->

data[j-1];

data[pos-1]=x;

};

voiddelnode(ListL,intpos)

{intj;

1||pos>

len)printf("

delerror\n"

for(j=pos;

j<

j++)

data[j-1]=L->

data[j];

len--;

voidprint(ListL)

inti;

for(i=1;

i<

i++)

printf("

%c->

"

L->

data[i-1]);

%c"

data[L->

len-1]);

voidmain()

inti=1,n;

lnodeL;

charch,x;

init(&

L);

\n\n\n*******************************顺序表演示程序***********\n"

请输入你想建立的顺序表的元素,以?

结束:

ch=getchar();

while(ch!

='

?

'

{insert(&

L,i,ch);

i++;

};

你建立的顺序表为:

print(&

\n顺序表的长度为:

%d"

L.len);

\n输入你想查找的元素:

fflush(stdin);

scanf("

&

x);

你查找的元素为%c序位为%d"

x,locate(&

L,x));

\n输入你想查找的元素序位:

n);

\n你查找的元素为:

getnode(&

L,n));

\n输入你想插入的元素以及序位:

<

用逗号隔开>

%c,%d"

x,&

insert(&

L,n,x);

\n插入后顺序表为:

\n请输入你想删除的元素序位:

delnode(&

L,n);

\n删除后的顺序表为:

getch();

四、测试结果

运行程序,屏幕显示:

“请输入你想建立的顺序表的元素,以?

输入:

54381

5—>

4—>

3—>

8—>

1

顺序表的长度为:

5

输入你想查找的元素:

4

你查找的元素为4序位为2

输入你想查找的元素序位:

你查找的元素为:

8

输入你想插入的元素以及序位:

6,3

插入后顺序表为:

6—>

请输入你想删除的元素序位:

删除后的顺序表为:

实验二二叉树的操作

一.实验目的

理解并熟悉掌握创建二叉树和实现二叉树的三种遍历

二.实验内容

创建二叉树和实现二叉树的三种遍历

根据提示输入字符型数据创建二叉树,输入值为所有字符型数据

输出为遍历后的每个结点的值的顺序

创建二叉树并能实现二叉树的先序、中序、后序遍历

如果输入数据为:

abc

输出结果为:

bac

bca

程序流程:

main()clrscr()createtree()preorder()inorder()postorder

stdlib.h"

/*引入头文件*/

structtnode/*定义二叉树存储结构*/

{chardata;

structtnode*lchild;

structtnode*rchild;

structtnodetree;

/*定义二叉树指针*/

voidcreatetree(structtnode*t)/*创建函数*/

{structtnode*p=t;

/*把二叉树指针给p*/

charcheck;

if(p->

lchild==NULL||p->

rchild==NULL)/*判断左右子树是否为空*/

{printf("

pleaseenterthedata:

/*输入根结点数据*/

scanf("

(p->

data));

getchar();

}

lchild==NULL)

%cleftchildisnull.Add?

y/n\n"

p->

data);

/*左子树空,询问是否创建*/

check);

if(check=='

y'

{structtnode*q=(structtnode*)malloc(sizeof(structtnode));

/*开辟空间*/

q->

lchild=NULL;

rchild=NULL;

p->

lchild=q;

createtree(q);

rchild==NULL)

%crightchildisNULL.Add?

/*右子树空,询问是否创建*/

rchild=q;

/*连到二叉树上*/

voidpreorder(structtnode*t)/*先序遍历函数*/

{if(t)

%c"

t->

/*输出根结点数据*/

preorder(t->

lchild);

rchild);

voidinorder(structtnode*t)/*中序遍历函数*/

{inorder(t->

printf("

inorder(t->

voidpostorder(structtnode*t)/*后序遍历函数*/

{

postorder(t->

clrscr();

/*清屏函数*/

tree.lchild=NULL;

/*左子树*/

tree.rchild=NULL;

/*右子树*/

createtree(&

tree);

/*创建二叉树*/

preorder(&

/*先序遍历*/

\n"

inorder(&

/*中序遍历*/

postorder(&

/*后序遍历*/

三.使用说明

程序运行:

先输入根结点数据,例如:

a

输入y或n判断是否创建左子树。

输入y然后输入左子树数据

输入y或n判断是否创建右子树。

输入y然后输入右子树数据

按回车可查看遍历结果并退出程序。

四.测试结果

运行程序,屏幕提示:

a/*首先输入根结点,为a*/

aleftchildisnull.add?

y/n/*询问是否输入a结点的左结点*/

y/*输入*/

b/*输入结点a的左结点,为b*/

bleftchildisnull.add?

y/n/*询问是否输入b结点的左结点*/

n/*不输入*/

brightchildisnull.add?

y/n/*询问是否输入b结点的右结点*/

arightchildisnull.add?

y/n/*询问是否输入a结点的右结点*/

c/*输入结点a的右结点,为c*/

cleftchildisnull.add?

y/n/*询问是否输入c结点的左结点*/

crightchildisnull.add?

y/n/*询问是否输入c结点的右结点*/

程序退出,显示结果应为:

abc/*先序*/

bac/*中序*/

bca/*后序*/

实验三图的遍历操作

一.实验目的:

该实验主要完成对图的创建,并实现图的深度优先遍历和广度优先遍历

二.实验内容:

所输入的数据要为整形数据

输出的形式为:

每按一次回车,遍历一个结点

能创建最大结点树为30的任意图,实现对无向图的两种遍历

main()clrscr()visited()DFS()visited()BFS()

#include<

stdlib.h>

/*引用两个头文件*/

#definemaxvex30/*定义MAXVEX=30*/

structedgenode/*定义边的结构体*/

{intadjvex;

charinfo;

structedgenode*next;

structvexnode/*定义点的结构体*/

structedgenode*link;

typedefstructvexnodeadjlist[maxvex];

/*自定义adjlist为结构体数组类型*/

adjlisttu1;

/*定义结构体数组变量tu1*/

voidcreategraph(adjlistg,intn)/*图创建函数*/

{inte,i,s,d;

/*定义存储边、点的变量*/

structedgenode*p,*q;

/*定义边的结构体指针*/

thepoint(n)andedge(e):

/*显示提示输入点,边*/

%d,%d"

n,&

e);

/*接收点、边存入n,e中*/

for(i=1;

=n;

{getchar();

\tthe%dinformation:

i);

/*提示输入结点信息*/

g[i].data);

/*存储信息*/

g[i].link=NULL;

/*最后指针为空*/

=e;

\nthe%dedges=>

\n\t:

/*提示输入边信息*/

s,&

d);

/*接收边的信息*/

p=(structedgenode*)malloc(sizeof(structedgenode));

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

/*开辟两个存储边的空间*/

adjvex=d;

/*把其中一个点存储下来*/

info=g[d].data;

adjvex=s;

/*把另一个点存储下来*/

info=g[s].data;

next=g[s].link;

/*p和s的link指针连接起来*/

g[s].link=p;

next=g[d].link;

/*q和s的link指针连接起来*/

g[d].link=q;

/*完成一个边的创建*/

intvisited[maxvex];

/*定义访问数组*/

voiddfs(adjlistadj,intv)/*深度优先遍历函数*/

{inti;

structedgenode*p;

/*定义边指针*/

visited[v]=1;

/*把开始遍历的点在访问数组中标识*/

nowisatpoint%d"

v);

/*输出正访问的点*/

p=adj[v].link;

thedatais%c\n"

adj[v].data);

/*输出点的信息*/

getch();

while(p)

{if(visited[p->

adjvex]==0)

dfs(adj,p->

adjvex);

/*没有访问的再调用DFS函数*/

p=p->

next;

/*访问过的判断下一个*/

intquene[maxvex];

voidbfs(adjlistadj,intvi)/*广度优先遍历函数*/

{intm=maxvex;

/*定义一个队列*/

intfront=0,rear=1,v;

visited[vi]=1;

/*开始访问的点标识一下*/

nowvisitthepoint:

%d\n"

vi);

/*输出正访问的点*/

quene[rear]=vi;

/*把访问过的点放入数组中*/

while(front!

=rear)

{front=(front+1)%m;

v=quene[front];

adjvex]==0)/*判断p->

adjvex点是否访问过*/

{visited[p->

adjvex]=1;

/*访问没有访问过的结点*/

/*输出正访问的结点*/

rear=(rear+1)%m;

quene[rear]=p->

adjvex;

/*放入数组中*/

/*指向下一个*/

clrscr();

creategraph(tu1,0);

/*创建图*/

maxvex;

visited[i]=0;

/*访问数组初始化*/

dfs(tu1,1);

/*调用DFS*/

/*等待输入*/

bfs(tu1,1);

/*调用BFS*/

三.使用说明:

根据屏幕上的英文提示先输入结点的个数和边数。

然后输入各结点存储的信息,再输入定义的边,形成图。

最后分别按照DFS深度优先遍历和BFS广度优先遍历实现对图的遍历。

四.测试结果:

运行程序,屏幕提示:

4,3/*输入顶点和边的数目*/

the1information:

a/*各个顶点的信息*/

the2information:

b

the3information:

c

the4information:

d

the1edges=>

/*各个边的连接情况*/

:

1,2

the2edges=>

1,3

the3edges=>

3,4

nowisatpoint1thedataisa/*深度优先遍历结果*/

nowisatpoint3thedataisc

nowisatpoint4thedataisd

nowisatpoint2thedataisb

1/*广度优先遍历结果*/

3

2

实验四栈的基本操作

一、实验目的:

1.熟练掌握栈的结构,以及这种数据结构的特点;

2.能够在两种存储结构上实现栈的基本运算,特别注意栈满和栈空的判断条件及描述方法;

二、实验内容:

计算表达式的值

【问题描述】

计算用运算符后缀法表示的表达式的值。

后缀表达式也称逆波兰表达式,比中缀表达式计算起来更方便简单些,中缀表达式要计算就存在着括号的匹配问题,所以在计算表达式值时一般都是先转换成后缀表达式,再用后缀法计算表达式的值。

如:

表达式(a+b*c)/d-e用后缀法表示应为abc*+d/e-。

只考虑四则算术运算,且假设输入的操作数均为1位十进制数(0—9),并且输入的后缀形式表达式不含语法错误。

【数据描述】

#defineadd43/*运算符加号‘+’的ASCII码*/

#definesubs

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

当前位置:首页 > 工程科技 > 交通运输

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

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