数据结构实验指导Word下载.docx
- 文档编号:19900903
- 上传时间:2023-01-12
- 格式:DOCX
- 页数:42
- 大小:136.62KB
数据结构实验指导Word下载.docx
《数据结构实验指导Word下载.docx》由会员分享,可在线阅读,更多相关《数据结构实验指导Word下载.docx(42页珍藏版)》请在冰豆网上搜索。
必修
线性表
利用顺序及链式存储实现线性表,并实现其基本操作。
3
栈
利用顺序或链式存储实现栈,并实现其基本操作。
利用堆栈完成表达式求值的算法操作。
4
串
建立串的数据类型,并实现其基本操作。
完成串的文本模式匹配算法。
5
数组和广义表
建立数组的存储结构,并实现其基本操作。
6
树的操作
建立树的数据类型并实现其基本操作;
实现二叉树的建立、遍历、输出查找、更新、插入、删除等算法。
实现哈夫曼树及其操作。
7
图的操作
实现图及其操作;
实行图的深度、广度遍历算法;
实现最短路径算法,拓扑排序算法。
实现AOE网关键路径。
8
排序
实现插入和选择排序算法;
实现交换和归并排序算法。
综合
六、考核方式及成绩评定
考核方式
1、实验平时成绩:
(1)实验考勤:
每次考勤分出勤(2分);
请假、迟到、早退(1分);
旷课(0分)记分。
(2)预习报告:
要求写明实验目的、主要实验设备名称、实验原理和内容。
分优秀(4分)、良好(3分)、中等(2分)、及格(1分)和不及格(0分)记分。
(3)实验报告:
要求写明实验设备名称和型号、实验步骤、实验分析及注意事项。
实验平时成绩最后折算成100分。
2、实验考试:
上机考试,满分为100分。
成绩评定:
总实验成绩占本课程成绩的20%。
总实验成绩=实验平时成绩×
50%+实验考试成绩×
50%。
实验一熟悉C语言
一、实验目的
1.复习C语言中数组的使用
2.复习C语言中指针的使用
3.复习C语言中结构体的使用
二、实验内容
1.学习C语言数组示例,写出程序结果
2.学习C语言指针示例,写出程序结果
3.学习C语言结构体示例,写出程序结果
三、实验实例
数组示例:
#include"
stdio.h"
#defineN4
main()
{
inti,j,k,a[N];
printf("
Pleaseinput4numbers:
\n"
);
for(i=0;
i<
N;
i++)
scanf("
%d"
&
a[i]);
for(i=N-1;
i>
1;
i--)
{
for(j=1;
j<
=i;
j++)
if(a[j-1]>
a[j])
k=a[j-1];
a[j-1]=a[j];
a[j]=k;
}
i++)printf("
%d"
a[i]);
}
思考题:
说出上述程序的功能
指针示例1:
#include
<
stdio.h>
main()
{
int
a,b;
*point_1,*point_2,*temp_point;
%d,%d"
a,&
b);
point_1=&
a;
point_2=&
b;
if
(a<
b)
temp_point=point_1;
point_1=point_2;
point_2=temp_point;
}
*point_1,*point_2);
指针示例2:
*point_1,*point_2;
point_1
=
&
point_2
compositor(point_1,point_2);
a,b);
static
compositor(p1,p2)
*p1,*p2;
temp;
(*p1<
*p2)
temp
*p1;
*p1
*p2;
*p2
比较指针示例1和指针示例2说出他们的区别,并分别说出他们的功能
结构体例子:
structstudent
{charnum[6];
//学生编号
charname[8];
//学生姓名
intscore[3];
//学生三门课程分数
floatavr;
}stu[5];
//共有五个学生
{inti,j,sum;
/*input*/
5;
i++)
{printf("
\npleaseinputNo.%dscore:
i);
stuNo:
"
%s"
stu.num);
name:
stu.name);
sum=0;
for(j=0;
3;
j++)
score%d."
j+1);
stu.score[j]);
sum+=stu.score[j];
stu.avr=sum/3.0;
这是关于学生成绩运算的一个结构体函数,写出函数功能
四、实验报告要求
1.上机前完成所有的函数编写
2.主要实验设备(软件)部分填写:
装有Win—TC软件的普通PC机
3.实验记录部分填写编写主函数调用所写所有函数的屏幕输出
4.设备名称填写PC机,型号可空,编号填写所使用计算机编号,运行情况填写良好
5.实验总结部分填写对该次实验所编写函数的运行情况,和在实验过程中对线性表的认识和实现情况
实验一(附)熟悉C语言
1.编写C语言函数,完成输出九九乘法表(提示:
使用二维数组完成)
2.编写C语言函数,使用指针完成一个二十位整型数组的遍历,并将数组中的各位分别增1
注意:
若对C语言比较熟悉,可进行实验一(附)中的实验项目编写,若不熟悉,则可完成对实验一中问题的回答
实验二线性表
1.掌握实现线性表的基本操作方法;
2.掌握线性表的基本操作:
建表,插入,删除,输出等运算在顺序存储结构和链式存储结构上的实现.
通过本次实习加深对高级语言C语言的使用(特别是函数参数、指针类型、链表的使用).熟悉线性表的基本运算在两种存储结构(顺序结构和链式结构)上的实现
1.编写生成线性表的函数,线性表的元素从键盘输入,分别使用顺序和链式存储结构存储;
2.编写在线性表中插入一元素的函数;
3.编写在线性表中删除一元素的函数;
4.编写输出线性表的函数;
5.编写主函数,调用以上各函数,以便能观察出原线性表以及作了插入或删除后线性表的屏幕输出.
三、实验报告要求
6.上机前完成所有的函数编写
7.主要实验设备(软件)部分填写:
8.实验记录部分填写编写主函数调用所写所有函数的屏幕输出
9.设备名称填写PC机,型号可空,编号填写所使用计算机编号,运行情况填写良好
10.实验总结部分填写对该次实验所编写函数的运行情况,和在实验过程中对线性表的认识和实现情况
四、实验原理
(一)线性表是最常用的而且也是最简单的一种数据结构,线性表是N个数据元素的有限序列。
例如26个英文元素的字母表:
(A,B,C,D,·
·
)。
其数据结构的描述为:
Linear_list=(D,R)其中:
D={ai|ai属于D0,i=1,2,3,·
}R={N},N={<
ai-1,ai>
|i=2,3,4,·
}。
本实验是以数组的形式把有序表存放在计算机内存的一个连续的区域内,这样便有:
LOC(ai+1)=LOC(ai)+m。
其中m是存放每个元素所占的内存字数。
LOC(ai)=LO+m·
(i-1)。
其中LO是ai的地址,即首地址。
(二)实验程序说明
插入一个新元素到第i个位置,既把元素ai向后移一个位置,成为元素ai+1,把新元素放入到第i个位置,其他元素依次后移。
存一新元素到第i个位置是把元素ai冲掉后存上新值。
删除第i个元素就是把余后的元素依次向前移一个位置。
即:
以元素ai+1,ai+2,·
,依次取代ai,ai+1,·
。
删除后的表长是n-1(n是原表长)。
三、程序流程图
五、参考程序
conio.h"
#defineMaxLine100/*顺序存储的最大个数*/
typedefintElemType;
typedefstruct
ElemTypedata[MaxLine];
/*存放顺序表的数组*/
intlength;
/*顺序表的长度*/
}SqList,*L;
/*初始化顺序表*/
voidInitList(SqList*L)
L->
length=0;
/*得到顺序表的长度*/
intGetLength(SqList*L)
returnL->
length;
/*得到顺序表中的第i个元素*/
ElemTypeGetElem(SqList*L,inti)
if(i<
1||i>
length)
{
printf("
error"
exit
(1);
}
data[i-1];
voidListInsert(SqList*L,inti,ElemTypex)
/*添加线性表中第i个位置上的元素,i从1开始*/
intj;
length+1)/*检查添加位置的合法性*/
if(L->
length==MaxLine)
overflow!
j=L->
while(j<
i-1)
data[j]=L->
data[j-1];
j--;
data[i-1]=x;
length++;
voidListDelete(SqList*L,inti)/*删除线性表中第i个位置上的元素*/
if(i<
1||i>
L->
length)/*检查空表及删除位置的合法性*/
{
printf("
不存在第i个元素"
exit(0);
for(j=i;
=L->
length-1;
data[j-1]=L->
data[j];
/*向前移动元素*/
length--;
SqList*L;
intt=1,d=1;
ElemTypedata;
InitList(L);
for(t=1;
t<
=8;
t++)
Pleaseinputthe%dthlistelem:
t);
scanf("
d);
ListInsert(L,t,d);
thelengthofListis%d\n"
GetLength(L));
data=GetElem(L,1);
%d\n"
data);
ListDelete(L,1);
getch();
六、实验步骤
1.参考实验程序自己编出程序,上机调试。
2.对调试好的程序进行以下实验
七、思考题
1.有序表,有哪些显著的特点和优点?
实验三栈
1.掌握实现栈的基本操作方法
2.掌握栈的基本操作:
建栈,Push,Pop等运算在顺序存储结构上的实现
通过本次实习加深对高级语言C语言的使用,熟悉串的基本运算顺序结构上的实现
1.编写生成栈的函数,栈的元素从键盘输入
2.编写在栈中压入一个元素的函数
3.编写在栈中弹出一个元素的函数
4.编写主函数,调用以上各函数,以便能观察出各函数的屏幕输出。
5.实验总结部分填写对该次实验所编写函数的运行情况,和在实验过程中对栈的认识和实现情况
四、参考程序
#defineMaxSize100/*栈中的元素的最大个数*/
ElemTypedata[MaxSize];
/*存放堆栈的数组*/
inttop;
/*栈顶元素*/
}Stack,*S;
/*堆栈的初始化*/
voidInitStack(Stack*S)
/*指向的是最顶端的元素
取值范围为从0~MaxSize-1
为-1时说明为空栈*/
S->
top=-1;
/*判栈空操作*/
intStackEmpty(Stack*S)
return(S->
top==-1?
1:
0);
/*压栈操作*/
voidPush(Stack*S,ElemTypex)
inti;
if(S->
top==MaxSize-1)
Stackisfull"
/*elseS->
data[++S->
top]=x;
*/
else
top=S->
top+1;
i=S->
top;
data[i]=x;
/*出栈操作*/
intPop(Stack*S)
inti;
if(StackEmpty(S))
\nStackisfree!
return0;
i=S->
data[S->
top];
top--;
returni;
/*栈长度操作*/
intGetLength(Stack*S)
returnS->
/*取栈顶操作*/
intGetTop(Stack*S)
\nStackisfree"
if(GetLength(S))
Stack*S;
inti,j,e,result;
InitStack(S);
for(i=1;
=2;
e);
Push(S,e);
Thenumberofelemis:
GetLength(S));
e=Pop(S);
\nAfterapop,Thenumberofelemis:
\n%d"
e);
for(i=0;
i<
10;
i++)
GetTop(S));
五、实验步骤
实验四串
1.熟悉串类型的实现
2.掌握串的模式匹配算法
1.利用C语言提供的关于串类型的操作;
2.使用简单算法或KMP算法实现模式匹配算法
5.实验总结部分填写对该次实验所编写函数的运行情况,和在实验过程中对串的认识和实现情况
#include<
string.h>
/*得到数组的长度*/
intstrLen(char*s)
inti=0;
while(s[i]!
='
\0'
)
i++;
returni;
/*简单模式匹配算法*/
intIndex(char*S,char*T,intpos)
/*存放比较的总次数*/
inttimes=0;
inti=pos-1,j=0;
intsLen=strLen(S);
inttLen=strLen(T);
while(i<
sLen&
j<
tLen)
times++;
if(S[i]==T[j]){i++;
j++;
}/*继续比较后续字符*/
else{i=i-j+1;
j=0;
}/*指针后退重新比较*/
thetimesthatcomparesare%d\n"
times);
if(j>
=tLen)
returni-tLen+1;
elsereturn0;
/*KMP算法*/
intIndex_KMP(char*S,char*T,intpos)
inti=pos,j=1;
intt;
charnext[100]="
;
GetNext(T,next);
/*打印next数组值*/
for(t=1;
t<
=tLen;
t++)
next[t]);
while(i<
sLen&
tLen)
if(j==0||S[i]==T[j]){i++;
/*继续比较后续字符*/
elsej=next[j];
/*子串向右移动*/
=tLen)returni-tLen+1;
/*匹配成功*/
/*得到next数组值*/
intGetNext(char*T,char*next)
inti=1,j=0;
next[1]=0;
if(j==0||T[i]==T[j])
++i;
++j;
next[i]=j;
elsej=next[j];
return1;
voidmain()
chars[]="
aaaaaaaaaaaaaaaaaaaaaab"
;
chart[]="
aaaab"
inti,pos;
pos=2;
i=Index(s,t,pos);
p
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验 指导