《数据结构》课程实验教学大纲Word文件下载.docx

上传人:b****5 文档编号:16343232 上传时间:2022-11-23 格式:DOCX 页数:65 大小:35.47KB
下载 相关 举报
《数据结构》课程实验教学大纲Word文件下载.docx_第1页
第1页 / 共65页
《数据结构》课程实验教学大纲Word文件下载.docx_第2页
第2页 / 共65页
《数据结构》课程实验教学大纲Word文件下载.docx_第3页
第3页 / 共65页
《数据结构》课程实验教学大纲Word文件下载.docx_第4页
第4页 / 共65页
《数据结构》课程实验教学大纲Word文件下载.docx_第5页
第5页 / 共65页
点击查看更多>>
下载资源
资源描述

《数据结构》课程实验教学大纲Word文件下载.docx

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

《数据结构》课程实验教学大纲Word文件下载.docx

9

最小生成树的建立

10

排序和查找的算法

选作

三、对培养学生的能力要求

要求学生理解数据结构的基本算法,并能够用程序设计语言实现这些算法。

灵活运用数据结构的基本算法解决的实际问题,培养学生的数据抽象能力和复杂编程能力。

1.完成线性表的顺序存储结构和链式存储结构的基本操作的实现,并能设计实现线性的应用程序,提高编程能力。

2.完成栈和队列的顺序存储结构和链式存储结构的基本操作的实现。

3.完成二叉树和树的存储、遍历等基本操作的实现。

4.完成图的存储、遍历等基本操作的实现。

5.掌握各种查找和排序的算法,设计一个综合应用程序,为后续课程的应用打下基础。

四、本实验课程对学生的考核评分方法

本实验课程成绩应占整个课程成绩的10%;

考勤情况占整个实验成绩的的20%;

实验报告占整个实验成绩的70%;

五、说明

本实验教学大纲适用于计算机技术及应用专业、信息管理专业以及数统专业的本科生。

实验的学时总数为8学时。

可根据讲课进度安排上机时间,也可根据不同情况适当增加实验上机时数,以适应不同专业的需要。

 

《数据结构》课程

实验指导书

河北经贸大学信息技术学院

目录

实验1抽象数据类型6

实验2线性表的基本操作8

实验3栈和队列的基本操作16

实验4迷宫问题——递归21

实验5广义表的基本操作23

实验6二叉树的基本操作26

实验7哈夫曼树及哈夫曼编码31

实验8图的基本操作34

实验9最小生成树的建立43

实验10查找和排序46

实验1抽象数据类型

1实验目的

(1)熟悉抽象数据类型的表示与实现方法。

(2)复习高级编程语言C++的使用方法。

2实验内容

设计一个可进行复数运算的演示程序。

【基本要求】

实现下列六种基本运算:

(1)由输入的实部和虚部生成一个复数;

(2)两个复数求和;

(3)两个复数求差;

(4)两个复数求积;

(5)从已知复数中分离出实部;

(6)从已知复数中分离出虚部。

运算结果以相应的复数或实数的表示形式显示。

【测试数据】自定

参考程序如下:

//抽象数据类型复数的表示与实现

#include<

iostream.h>

typedefstructRECORD

{

doublereal;

doubleimage;

}cmptp;

intcreate(doublex,doubley,cmptp&

z)

{

z.real=x;

z.image=y;

return1;

}

intadd(cmptpz1,cmptpz2,cmptp&

sum)

{

sum.real=z1.real+z2.real;

sum.image=z1.image+z2.image;

intSUBSTRACT(cmptpz1,cmptpz2,cmptp&

difference)

difference.real=z1.real-z2.real;

difference.image=z1.image-z2.image;

intmultiply(cmptpz1,cmptpz2,cmptp&

product)

product.real=(z1.real*z2.real)-z1.image*z2.image;

product.image=z1.image*z2.real+z1.real*z2.image;

doublegetreal(cmptpz)

returnz.real;

doublegetimage(cmptpz)

returnz.image;

//上机调试验证

voidmain()

cmptpz;

create(1,2,z);

cout<

<

z.real<

z.image<

endl;

cmptpz1={3,4};

getreal(z1)<

cmptpz2={5,6};

cmptpsum;

add(z1,z2,sum);

sum.real<

sum.image<

SUBSTRACT(z1,z2,sum);

multiply(z1,z2,sum);

3实验要求

按要求编写实验程序,将实验程序上机调试运行,并提交实验报告。

实验2线性表的基本操作

(1)熟练掌握线性表的逻辑特征。

(2)熟练掌握线性表的基本操作在两种存储结构上的实现。

2实验内容

(1)设计一个顺序表的基本操作的演示程序

(2)设计一个单链表的基本操作的演示程序

(3)设计一个双链表的基本操作的演示程序

实现下列4种基本运算:

(1)初始化线性表;

(2)在第I个元素前插入一个元素e;

(3)删除第I个元素;

(4)遍历线性表;

(5)将单链表逆置

//顺序表的基本操作

//顺序表的定义

#defineMAX15

typedefstruct{

intelem[MAX];

intlength;

}Sqlist;

voidInitlist_sq(Sqlist&

L);

voidListInsert_sq(Sqlist&

L,inti,inte);

voidListDel_sq(Sqlist&

L,inti,int&

e);

voidprint_sq(SqlistL);

//函数的定义

L)

L.length=0;

}

L,inti,inte)

int*p,*q;

if(i<

1||i>

L.length+1)return;

q=&

L.elem[i-1];

//插入位置

for(p=&

L.elem[L.length-1];

p>

=q;

--p)

*(p+1)=*p;

*q=e;

++L.length;

return;

e)

L.length)return;

e=L.elem[i-1];

for(intj=i;

j<

L.length;

j++)

L.elem[j-1]=L.elem[j];

--L.length;

voidprint_sq(SqlistL)

int*p,*q=L.elem+L.length-1;

for(p=L.elem;

p<

p++)

cout<

*p<

'

'

;

"

\n"

voidmain()

inta[11]={10,20,30,40,50,60,70,80,90,100};

SqlistL;

//初始化顺序表

Initlist_sq(L);

现在的表长:

"

L.length<

//插入10个数据元素

for(inti=1;

i<

=10;

++i)

ListInsert_sq(L,i,a[i-1]);

插入10个元素后的线性表:

//遍历

print_sq(L);

//删除第5个元素

intx;

ListDel_sq(L,5,x);

删除的元素值是:

x<

删除第5个元素后的表:

//单链表的操作

structNODE

intdata;

NODE*next;

};

voidprint(NODE*&

head);

intdata[6]={25,41,17,98,5,6};

voidSetup_L(NODE*&

head,intn);

//生成单链表

voidInsert_L(NODE*&

head,intI,inte);

//插入

voidDelete_L(NODE*&

head,intI,int&

//删除

voidConvert_L(NODE*&

head);

//逆序

NODE*L;

Setup_L(L,6);

print(L);

//Insert_L(L,7,50);

Delete_L(L,0,x);

X="

Convert_L(L);

head)

NODE*p;

p=head->

next;

while(p)

p->

data<

"

;

//输出元素值

p=p->

next;

//后移指针

voidSetup_L(NODE*&

head,intn)

NODE*q,*p;

head=(NODE*)newNODE;

head->

next=NULL;

//先建立一个带头结点的单链表

q=head;

for(inti=0;

n;

i++){

p=(NODE*)newNODE;

//生成新结点

p->

data=data[i];

q->

next=p;

q=p;

//插入到表头

next=NULL;

NODE*p=L,*q;

intj=0;

while(p&

&

i-1)

{p=p->

j++;

if(!

p||j>

{cout<

插入值超出范围!

q=(NODE*)newNODE;

data=e;

next=p->

next=q;

voidDelete_L(NODE*&

L,inti,int&

删除值超出范围!

q=p->

e=q->

data;

next=q->

deleteq;

NODE*p,*q,*r;

p=L->

while(q)

r=q->

q->

next=p;

L->

next=q;

p=q;

q=r;

//双链表的基本操作

NODE*prior;

};

intdata[6]={3,5,7,19,20,21};

//测试用数据

//函数声明

voidSetup_L(NODE*&

L,inti,inte);

voidConvert_L(NODE*&

//主函数和各函数的定义

Insert_L(L,7,50);

print(L);

Delete_L(L,1,x);

{//从头开始顺序输出双连表中的数据

{cout<

"

p=p->

}

{//创建一个带头结点的双连表

p=(NODE*)newNODE;

p->

//cin>

>

data;

prior=q;

q->

q=p;

//return(head);

L,inti,inte)

{//在带头结点的双链表中第i个位置插入元素e

NODE*p=L,*q;

//j为计数器

i-1)

{p=p->

}//寻找第i-1个结点

i-1)//i小于1或大于表长

插入值超出范围!

if(p->

next==NULL)

{q->

next=p->

else

next->

prior=p;

}//插入L中

voidDelete_L(NODE*&

{//在带头结点的双链表L中,删除第i个元素,并由e返回其值

i-1)//寻找第i-1个结点

删除值超出范围!

//删除位置不合理

next=q->

}//删除并释放结点

实验3栈和队列的基本操作

(1)深入了解栈和队列的基本特性

(2)熟练掌握栈的基本操作在两种存储结构上的实现。

(3)熟练掌握循环队列的基本操作

(4)熟练掌握链队列的基本操作

(1)设计一个顺序栈的基本操作的演示程序

(2)设计一个链栈的基本操作的演示程序

(3)设计一个循环队列的基本操作的演示程序

(4)设计一个链队列的基本操作的演示程序

实现下列6种基本运算:

(1)初始化;

(2)入栈(队列);

(3)出栈(队列);

(4)遍历;

(5)求栈(队列)的长度

//顺序栈的基本操作

#defineMAX10

intbase;

inttop;

intst[MAX];

}SqStack;

//基本操作说明

voidInitStack(SqStack&

S);

voidpush(SqStack&

S,inte);

voidpop(SqStack&

S,int&

//基操作的算法描述

voidInitStack(SqStack&

S)

S.base=S.top=0;

voidpush(SqStack&

S,inte)

if(S.top==MAX)

”栈满\n”;

S.st[S.top]=e;

S.top+=1;

if(S.top==0)

”栈空\n”;

S.top-=1;

e=S.st[S.top];

voidprint(SqStackS)

”栈的各个元素如下:

\n”;

for(intI=0;

I<

S.top;

I++)

S.st[I]<

”“;

SqStackS;

//初始化

”初始化栈\n”;

InitStack(S);

”栈底和栈顶:

”<

S.base<

”,”<

S.top<

//入栈

”5个元素入栈\n”;

5;

push(S,2*I+1);

”栈顶为:

S.top<

print(S);

//出栈

pop(S,x);

”出栈元素为:

”栈顶”<

//循环队列的基本操作

#defineMAX8

typedefstruct

intbase[MAX];

intfront;

intrear;

}SqQueue;

/***********初始化**************/

voidInitQueue(SqQueue&

Q)

Q.front=Q.rear=0;

//******求队列长度******//

intQueueLength(SqQueueQ)

return(Q.rear-Q.front+MAX)%MAX;

//*****入队列****************//

voidEnQueue(SqQueue&

Q,inte)

if((Q.rear+1)%MAX==Q.front)

”队列满!

else

{Q.base[Q.rear]=e;

Q.rear=(Q.rear+1)%MAX;

//*******遍历队列******//

voidtraverse(SqQueue&

Q)

intI,k;

if(Q.front<

=Q.rear)

k=0;

k=1;

switch(k)

case0:

for(I=Q.front;

Q.rear;

Q.base[I]<

break;

case1:

for(I=Q.front;

MAX;

for(I=0;

Q.rear;

break;

/**************出队************/

intDeQueue(SqQueue&

Q,int&

if(Q.rear==Q.front)return–1;

e=Q.base[Q.front];

Q.front=(Q.front+1)%MAX;

SqQueueQ;

InitQueue(Q);

intj,m,x;

for(j=0;

7;

EnQueue(Q,2*j);

traverse(Q);

m=QueueLength(Q);

cout<

”\n长度”<

m<

EnQueue(Q,500);

DeQueue(Q,x);

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

当前位置:首页 > 幼儿教育 > 育儿理论经验

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

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