数据结构实验课教案.docx

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

数据结构实验课教案.docx

《数据结构实验课教案.docx》由会员分享,可在线阅读,更多相关《数据结构实验课教案.docx(114页珍藏版)》请在冰豆网上搜索。

数据结构实验课教案.docx

数据结构实验课教案

授课教案

2016—2017学年度第一学期)

课程名称:

课程编码:

总学时:

课程类别:

任课教师:

开课单位:

职称:

授课专业:

授课班级:

数据结构

B13040009A

64

总学分:

专业课

4

李素若

计算机工程学院

教授

计算机科学与技术

2015级计算机科学与技术专业1、2班

 

2

016年9月14日(9

授课进度第3周,第6次课(2学时)

授课日期

月13日)

授课题目

(教学章、节实验一线性表的顺序存储结构

或主题)

1

2

.掌握线性表顺序存储结构的特点:

逻辑上相邻的数据元素其物理位置上也相邻。

.掌握线性表顺序存储结构的插入、删除操作特点移动操作。

教学

目标

1.线性表的顺序存储特点

2.线性表的顺序存储的基本算法

教学

重点

1.线性表的顺序存储的基本算法

教学

难点

请选择你授课时所采用的教学方法(在括号中画“√”):

讲授法﹝﹞,讨论法﹝﹞,演示法﹝﹞,案例法﹝﹞,发现法﹝﹞,探究法﹝﹞,

谈话法﹝﹞,实验法﹝√﹞,参观法﹝﹞,考察法﹝﹞,自学辅导法﹝﹞,练习

法(习题或操作课)﹝√﹞,读书指导法﹝﹞,听说法﹝﹞,写生法﹝﹞,视唱

法﹝﹞,工序法(技能课)﹝﹞,实习作业法﹝﹞,其他﹝﹞

教学

方法

请选择你授课时所采用的教学手段(在括号中画“√”):

教学

手段

实物﹝﹞,多媒体﹝﹞,投影﹝﹞,影像﹝﹞,CAI课件﹝﹞,PPT﹝√﹞,标本

﹝﹞,挂图﹝﹞,模型﹝﹞,其他﹝﹞

论、

思考

题、

作业

[

[

1]李素若,陈万华,游明坤主编.数据结构.北京:

中国水利水电出版社,2014.

2]李素若,陈万华,游明坤主编.数据结构习题集及上机指导.北京:

中国水利水

参考

文献

电出版社,2014.

 

教学过程及内容

一、实验内容

1

2

3

4

5

6

7

.输入一组整型元素序列,建立顺序表。

.遍历该顺序表。

.在该顺序表中进行顺序查找某一元素,查找成功返回1,否则返回0。

.实现把该表中所有奇数排在偶数之前,即表的前面为奇数,后面为偶数。

.判断该顺序表中元素是否对称,对称返回1,否则返回0。

.输入整型元素序列利用有序表插入算法建立一个有序表。

.利用实验6建立两个递增有序表并把它们合并成一个递增有序表。

二、实验指导

1.参考程序为:

voidCreateSqList(SqList*L)

{

intn,i;

do{

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

");

scanf("%d",&n);

if(n<=0)printf("输入错误\n");

}

while(n<=0);

for(i=0;i

scanf("%d",&(L>elem[i]));

L>length=n;

}

2

.参考程序为:

voidPrintList(SqListL)

{

inti;

for(i=0;i

printf("%d",L.elem[i]);

printf("\n");

}

3.参考程序为:

intFindelems(SqListL,ElemTypee)

{

inti;

for(i=0;i

if(L.elem[i]==e)

return1;

return0;

}

4.分析:

从顺序表表头开始扫描,当数据元素为偶数时就从该数开始往后查找,一旦

1—

 

教学过程及内容

找到奇数,则将该偶数与此奇数交换。

顺序表中所有数据全部扫描结束后,所有奇数就排列

在表的前端。

参考程序为:

voidChangeVal(SqList*L)

{

inti,j,temp;

for(i=0;ilength;i++)

{

if(L>elem[i]%2==0)

{

for(j=i+1;jlength;j++)

{

if(L>elem[j]%2!

=0)

{

temp=L>elem[i];

L>elem[i]=L>elem[j];

L>elem[j]=temp;

break;

}

}

if(j==L>length)break;

}

}

}

5.参考程序为:

intYesNo_Symmetry(SqListL)

{

inti,j;

j=L.length1;

for(i=0;i

{

if(L.elem[i]!

=L.elem[ji])

return0;

}

return1;

}

6

.参考程序为:

voidInsert_OrderList(SqList*L,intx)

{

inti,j;

for(i=0;ilength;i++)

if(L>elem[i]>x)break;

for(j=L>length1;j>=i;j)

2—

 

教学过程及内容

L>elem[j+1]=L>elem[j];

L>elem[i]=x;

L>length++;

}

voidCreate_OrderList(SqList*L)

{

intn,i,input;

do{

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

");

scanf("%d",&n);

if(n<=0)printf("输入错误\n");

while(n<=0);

}

for(i=0;i

{

scanf("%d",&input);

Insert_OrderList(L,input);

}

}

7

.参考程序为:

SqList*Merge_OrderList(SqListA,SqListB)

{

//将有序顺序表A和B合并到有序顺序表C中返回

inti=0,j=0,k=0;

SqList*C=(SqList*)malloc(sizeof(SqList));

C>length=0;

while(j

{

if(A.elem[j]

C>elem[i++]=A.elem[j++];

else

C>elem[i++]=B.elem[k++];

}

if(j==A.length)

while(kelem[i++]=B.elem[k++];

if(k==B.length)

while(jelem[i++]=A.elem[j++];

C>length=i;

returnC;

}

3—

 

2

016年9月21日(9

授课进度第4周,第8次课(2学时)

授课日期

月20日)

授课题目

(教学章、节实验二单向链表

或主题)

1

2

3

.掌握线性链表的操作特点,即指针是逻辑关系的映像。

.掌握动态产生单链表的方法。

.熟练掌握单链表的插入、删除操作特点,即指针赋值的先后次序。

教学

目标

1.掌握动态产生单链表的方法。

2.熟练掌握单链表的插入、删除操作特点,即指针赋值的先后次序。

教学

重点

1.熟练掌握单链表的插入、删除操作特点,即指针赋值的先后次序。

教学

难点

请选择你授课时所采用的教学方法(在括号中画“√”):

讲授法﹝﹞,讨论法﹝﹞,演示法﹝﹞,案例法﹝﹞,发现法﹝﹞,探究法﹝﹞,

谈话法﹝﹞,实验法﹝√﹞,参观法﹝﹞,考察法﹝﹞,自学辅导法﹝﹞,练习

法(习题或操作课)﹝√﹞,读书指导法﹝﹞,听说法﹝﹞,写生法﹝﹞,视唱

法﹝﹞,工序法(技能课)﹝﹞,实习作业法﹝﹞,其他﹝﹞

教学

方法

请选择你授课时所采用的教学手段(在括号中画“√”):

教学

手段

实物﹝﹞,多媒体﹝﹞,投影﹝﹞,影像﹝﹞,CAI课件﹝﹞,PPT﹝√﹞,标本

﹝﹞,挂图﹝﹞,模型﹝﹞,其他﹝﹞

论、

思考

题、

作业

[

[

1]李素若,陈万华,游明坤主编.数据结构.北京:

中国水利水电出版社,2014.

2]李素若,陈万华,游明坤主编.数据结构习题集及上机指导.北京:

中国水利水

参考

文献

电出版社,2014.

 

教学过程及内容

一、实验内容

1

2

3

4

5

.随机产生或键盘输入一组元素,建立一个带头结点的单向链表(无序)。

.遍历单向链表。

.把单向链表中元素逆置(不允许申请新的结点空间)。

.在单向链表中删除所有的偶数元素结点。

.编写在非递减有序链表中插入一个元素使链表元素仍有序的函数,并利用该函数建

立一个非递减有序单向链表。

6

7

.利用实验5建立两个递增有序单向链表,然后合并成一个递增链表。

.利用实验1建立的链表,实现将其分解成两个链表,其中一个全部为奇数,另一个

全部为偶数(尽量利用已知的存储空间)。

二、实验指导

1.参考程序为:

LinkListCreateListH(void)//头插法产生带头结点单链表

{

intch;

LinkListhead=(LinkList)malloc(sizeof(LNode));

LinkLists;

head>next=NULL;

while(scanf("%d",&ch)==1)//输入数据类型错误时结束单链表的生成

{

s=(LinkList)malloc(sizeof(LNode));

s>data=ch;

s>next=head>next;

head>next=s;

}

returnhead;

}

LinkListCreateListRand(void)//利用随机函数产生带头结点单链表(头插法)

{

intch,i;

LinkListhead=(LinkList)malloc(sizeof(LNode));

LinkLists;

head>next=NULL;

srand((unsigned)time(NULL));

printf("PleaseinputCreateNnmbers:

");

scanf("%d",&ch);

for(i=0;i

{

s=(LinkList)malloc(sizeof(LNode));

s>data=rand()%50;//随机产生0~49之间的数

1—

 

教学过程及内容

s>next=head>next;

head>next=s;

}

returnhead;

}

2

.参考程序为:

voidPrintLinkList(LNodeL)

{

LinkListp;

p=L.next;

while(p)

{

printf("%d",p>data);

p=p>next;

}

printf("\n");

}

3.参考程序为:

voidInverse_set(LinkListhead)

{

LNode*r,*m=NULL,*p;

p=head>next;

while(p!

=NULL)

{

r=m;m=p;

p=p>next;

m>next=r;

}

head>next=m;

}

4.参考程序为:

voidDelEvenLinkList(LinkListhead)

{

LinkListq,p;

p=head>next;

q=head;

while(p)

{

if(p>data%2==0)

{

q>next=p>next;

free(p);

2—

 

教学过程及内容

p=q>next;

}

else

{

q=p;

p=p>next;

}

}

}

5

.参考程序为:

voidInsertIncr(LinkListhead,ElemTypex)

{

//将结点插入递增的单链表

LinkListq,p,s;

s=(LinkList)malloc(sizeof(LNode));

s>data=x;

q=head;

p=head>next;

while(p&&p>data

{

q=p;

p=p>next;

}

s>next=q>next;

q>next=s;

}

LinkListCreateListIncr(void)

{

//通过调用插入有序链表函数生成递增单链表

intch;

LinkListhead=(LinkList)malloc(sizeof(LNode));

LinkLists;

head>next=NULL;

while(scanf("%d",&ch)==1)//输入数据类型错误时结束单链表的生成

InsertIncr(head,ch);

returnhead;

}

6

.参考程序为:

LinkListLinkListCat(LinkListhead1,LinkListhead2)

{

LinkListh1,h2,h;

LinkListhead=(LinkList)malloc(sizeof(LNode));

head>next=NULL;

3—

 

教学过程及内容

h1=head1>next;

h2=head2>next;

h=head;

while(h1&&h2)

{

if(h1>datadata)

{

h>next=h1;

h=h>next;

h1=h1>next;

}

else

{

h>next=h2;

h=h>next;

h2=h2>next;

}

}

if(h1)h>next=h1;

if(h2)h>next=h2;

returnhead;

}

7

#

#

#

.参考程序为:

include

include

include

typedefintElemType;//元素类型

typedefstructLNode

{

ElemTypedata;

structLNode*next;

}

LNode,*LinkList;

voidPrintLinkList(LNodeL)

{

LinkListp;

p=L.next;

while(p)

{

printf("%d",p>data);

p=p>next;

4—

 

教学过程及内容

}

printf("\n");

}

voidDecoLinkList(LNodehead,LinkListhead1,LinkListhead2)

{

//将单链表head拆分奇数链head1和偶数链head2

LinkListh,h1,h2;

h=head.next;

h1=head1;

h2=head2;

while(h)

{

if(h>data%2==0)

{

h2>next=h;

h=h>next;

h2=h2>next;

}

else

{

h1>next=h;

h=h>next;

h1=h1>next;

}

}

h1>next=NULL;

h2>next=NULL;

}

main()

{

LinkListhead;

LinkListhead1=(LinkList)malloc(sizeof(LNode));

LinkListhead2=(LinkList)malloc(sizeof(LNode));

head=CreateListIncr();

PrintLinkList(*head);

DecoLinkList(*head,head1,head2);

PrintLinkList(*head1);

PrintLinkList(*head2);

}

5—

 

2

016年9月28日(9

授课进度第5周,第10次课(2学时)

授课日期

月27日)

授课题目

(教学章、节实验三栈的存储及基本运算

或主题)

1

2

.掌握栈这种数据结构特性及其主要存储结构,并能在现实生活中灵活运用。

.了解和掌握递归程序设计的基本原理和方法。

教学

目标

1

2

3

.掌握栈的两种存储结构

.栈的基本运算

教学

重点

.了解栈在递归函数中的作用

1

.掌握栈的两种存储结构

.栈的基本运算

教学

难点

2

请选择你授课时所采用的教学方法(在括号中画“√”):

讲授法﹝﹞,讨论法﹝﹞,演示法﹝﹞,案例法﹝﹞,发现法﹝﹞,探究法﹝﹞,

谈话法﹝﹞,实验法﹝√﹞,参观法﹝﹞,考察法﹝﹞,自学辅导法﹝﹞,练习

法(习题或操作课)﹝√﹞,读书指导法﹝﹞,听说法﹝﹞,写生法﹝﹞,视唱

法﹝﹞,工序法(技能课)﹝﹞,实习作业法﹝﹞,其他﹝﹞

教学

方法

请选择你授课时所采用的教学手段(在括号中画“√”):

教学

手段

实物﹝﹞,多媒体﹝﹞,投影﹝﹞,影像﹝﹞,CAI课件﹝﹞,PPT﹝√﹞,标本

﹝﹞,挂图﹝﹞,模型﹝﹞,其他﹝﹞

论、

思考

题、

作业

[

[

1]李素若,陈万华,游明坤主编.数据结构.北京:

中国水利水电出版社,2014.

2]李素若,陈万华,游明坤主编.数据结构习题集及上机指导.北京:

中国水利水

参考

文献

电出版社,2014.

 

教学过程及内容

一、实验内容

1

2

3

.采用顺序存储实现栈的初始化、入栈、出栈操作。

.采用链式存储实现栈的初始化、入栈、出栈操作。

.写一个程序,将输入的十进制数据M转换为八进制数据M8,将其调试通过。

在此

基础上修改程序,实现十进制数据M向N进制(2或8或16)的转换。

1)采用顺序存储结构实现栈。

2)采用链表结构实现栈。

二、实验指导

1

#

#

#

#

#

.参考程序为:

include

include

defineStack_Size100

defineOK

1

defineERROR

0

typedefintElemType;

typedefstructStack

{

ElemTypeelem[Stack_Size];

inttop;

//用来存放栈中元素的一维数组

//用来存放栈顶元素的下标

}

SqStack;

intInitStack(SqStack**s)//初始化顺序栈

{

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

if((*s)==NULL)returnERROR;

*s)>top=1;

returnOK;

}

intEmptyStack(SqStacks)//判断栈空

{

if(s.top==1)

{

printf("stackisempty!

\n");

returnOK;

}

returnERROR;

}

intGetTop(SqStacks,int*e)//取栈顶元算

{

if(EmptyStack(s))returnERROR;

*e=s.elem[s.top];

1—

 

教学过程及内容

returnOK;

}

intPush(SqStack*s,inte)//入栈

{

if(s>top==Stack_Size1)

{

printf("stackisfull!

\n");

returnERROR;

}

s>top++;

s>elem[s>top]=e;

returnOK;

}

voidPrintStack(SqStacks)//打印栈中数据

{

inti;

for(i=0;i<=s.top;i++)

printf("%d",s.elem[i]);

printf("\n");

}

intPop_Stack(SqStack*s,int*e)//出栈

{

if(EmptyStack(*s))

returnERROR;

*e=s>elem[s>top];

s>top;

returnOK;

}

voidmain()

{

intcord,e,x,y;

SqStack*s;

do

{

printf("\nMainMenu\n");

printf("1CreatStack\n");

printf("2GetTopElement\n");

printf("3Push\n");

printf("4Pop\n");

printf("5Print\n");

printf("6quit\n");

scanf("%d",&cord);

2—

 

教学过程及内容

switch(cord)

{

case1:

InitStack(&s);

break;

case2:

case3:

if(GetTop(*s,&y))

printf("StackTop=[%d]\n",y);

break;

printf("Pleaseinputpushelement:

");

scanf("%d",&e);

Push(s,e);

break;

case4:

if(Pop_Stack(s,&x))

printf("Popstack=[%d]\n",x);

break;

case5:

case6:

PrintStack(*s);

break;

return;

}

}

while(cord<=6);

}

2

#

#

#

#

#

.参考程序为:

include

include

defineStack_Size100

defineOK

1

defineERROR

0

typedefintElemType;

typedefstructstacknode

{

ElemTypedata;

structstacknode*next;

}

StackNode;

typedefstruct

{

StackNode*top;/*栈顶指针*/

LinkStack;

}

3—

 

教学过程及内容

voidInitStack(LinkStack*s)//初始化栈

{

s>top=NULL;

}

intEmptyStack(LinkStacks)//判断栈空

{

if(s.top==NULL)returnOK;

elsereturnERROR;

}

intGetTop(LinkStacks,int*e)//取栈顶元素

{

if(EmptyStack(s))returnE

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

当前位置:首页 > 高等教育 > 工学

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

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