数据结构实验指导书Word文件下载.docx
- 文档编号:18331087
- 上传时间:2022-12-15
- 格式:DOCX
- 页数:35
- 大小:27.14KB
数据结构实验指导书Word文件下载.docx
《数据结构实验指导书Word文件下载.docx》由会员分享,可在线阅读,更多相关《数据结构实验指导书Word文件下载.docx(35页珍藏版)》请在冰豆网上搜索。
intLocateList(SeqListL,DataTypex);
voidInsertList(SeqList*L,DataTypex,inti);
voidDeleteList(SeqList*L,inti);
CreateList(&
L,n);
//建立顺序表
PrintList(L,n);
//打印顺序表
printf("
输入要查找的值:
"
);
scanf("
%d"
&
x);
i=LocateList(L,x);
//顺序表查找
输入要插入的位置:
i);
输入要插入的元素:
InsertList(&
L,x,i);
//顺序表插入
}printf("
输入要删除的位置:
DeleteList(&
L,i);
//顺序表删除
}
//顺序表的建立:
voidCreateList(SeqList*L,intn)
//在此插入必要的语句
//顺序表的打印:
voidPrintList(SeqListL,intn)
//顺序表的查找:
intLocateList(SeqListL,DataTypex)
//顺序表的插入:
voidInsertList(SeqList*L,DataTypex,inti)
//顺序表的删除:
voidDeleteList(SeqList*L,inti)
实验二、单链表(2学时)
1.验证实验
打开教材自带教学辅助光盘,进入光盘中的“\DSDemoC”目录,运行DSDemo.EXE,进入数据结构算法演示系统(C语言描述)V3.1C中文版。
具体操作请按照界面上的提示进行。
选择主菜单中链表下的各算法。
首先仔细阅读算法,再输入数据,分步运行算法,检验自己对算法的理解是否正确。
在实验报告中写出自己在演示算法过程中理解和实际运算的不同之处,并总结原因。
2.设计实验
设计算法,实现线性结构上的单链表的产生以及元素的查找、插入与删除。
(1)从键盘输入20个整数,产生不带表头的单链表,并输入结点值。
(2)从键盘输入1个整数,在单链表中查找该结点的位置。
若找到,则显示“找到了”;
否则,则显示“找不到”。
(3)从键盘输入2个整数,一个表示欲插入的位置i,另一个表示欲插入的数值x,将x插入在对应位置上,输出单链表所有结点值,观察输出结果。
(4)从键盘输入1个整数,表示欲删除结点的位置,输出单链表所有结点值,观察输出结果。
(5)将单链表中值重复的结点删除,使所得的结果表中个结点值均不相同,输出单链表所有结点值,观察输出结果。
(6)删除其中所有数据值为偶数的结点,输出单链表所有结点值,观察输出结果。
(7)把单链表变成带表头结点的循环链表,输出循环单链表所有结点值,观察输出结果。
(8)将单链表分解成两个单链表A和B,使A链表中含有原链表中序号为奇数的元素,而B链表中含有原链表中序号为偶数的元素,且保持原来的相对顺序,分别输出单链表A和单链表B的所有结点值,观察输出结果。
3.实验报告
完成实验二实验报告。
要求同实验一。
//单链表的定义:
typedefstructnode//结点类型定义
{DataTypedata;
//结点的数据域
structnode*next;
//结点的指针域
}ListNode;
typedefListNode*LinkList;
inti;
DataTypekey,x;
LinkListhead;
ListNode*p;
LinkListCreateList(void);
voidPrintList(LinkListhead);
LinkListLocateNode(LinkListhead,DataTypekey);
LinkListGetNode(LinkListhead,inti);
voidInsertList(LinkListhead,DataTypex,inti);
voidDeleteList(LinkListhead,inti);
voidDeleteManyList(LinkListhead);
voidDeleteEvenList(LinkListhead);
voidChangeCircList(LinkListhead);
voidPrintCircList(LinkListhead);
head=CreateList();
//建立单链表
PrintList(head);
//打印单链表
key);
p=LocateNode(head,key);
//单链表查找
请输入欲插入元素的位置:
请输入欲插入的元素:
InsertList(head,x,i);
//单链表插入
请输入欲删除结点的位置:
DeleteList(head,i);
//单链表删除
DeleteManyList(head);
//删除重复值
DeleteEvenList(head);
//删除偶数值
ChangeCircList(head);
//修改为循环单链表
PrintCircList(head);
//打印循环单链表
/*voidDivideList(LinkListhead,LinkList*A,LinkList*B);
//分割成两个单链表
DivideList(head,&
A,&
B);
PrintList(A);
PrintList(B);
*/
//单链表的建立:
LinkListCreateList(void)
//单链表的打印:
voidPrintList(LinkListhead)
//单链表的查找1:
LinkListLocateNode(LinkListhead,DataTypekey)
//单链表的查找2:
LinkListGetNode(LinkListhead,inti)
//单链表的插入:
voidInsertList(LinkListhead,DataTypex,inti)
//单链表的删除:
voidDeleteList(LinkListhead,inti)
//删除单链表中重复值:
voidDeleteManyList(LinkListhead)
//删除单链表中偶数值:
voidDeleteEvenList(LinkListhead)
//修改为循环单链表:
voidChangeCircList(LinkListhead)
//循环单链表的打印:
voidPrintCircList(LinkListhead)
/*
//分割成两个单链表
voidDivideList(LinkListhead,LinkList*A,LinkList*B);
*/
实验三、栈和队列(4学时)
1.验证实验
分别选择主菜单中栈子菜单下的前三个算法和队列子菜单下的各算法。
2.应用实验
阅读所给的源程序,在实验报告中写出算法的功能和运行结果。
程序如下:
#defineMAXNUM100/*栈中最大元素个数*/
#defineN11/*地图的第一维长度*/
typedefstruct{
intx;
/*行下标*/
inty;
/*列下标*/
intd;
/*运动方向*/
}DataType;
structSeqStack{/*顺序栈类型定义*/
intt;
/*指示栈顶位置*/
DataTypes[MAXNUM];
};
typedefstructSeqStack*PSeqStack;
/*顺序栈类型的指针类型*/
PSeqStackpastack;
/*pastack是指向顺序栈的一个指针变量*/
PSeqStackcreateEmptyStack_seq(void){
PSeqStackpastack;
pastack=(PSeqStack)malloc(sizeof(structSeqStack));
if(pastack==NULL)
Outofspace!
!
\n"
else
pastack->
t=-1;
returnpastack;
intisEmptyStack_seq(PSeqStackpastack){
returnpastack->
t==-1;
/*在栈中压入一元素x*/
voidpush_seq(PSeqStackpastack,DataTypex){
if(pastack->
t>
=MAXNUM-1)
printf("
Overflow!
);
else{
t++;
s[pastack->
t]=x;
}
/*删除栈顶元素*/
voidpop_seq(PSeqStackpastack){
if(pastack->
t==-1)
Underflow!
\n"
t--;
/*当pastack所指的栈不为空栈时,求栈顶元素的值*/
DataTypetop_seq(PSeqStackpastack){
return(pastack->
t]);
voidpushtostack(PSeqStackst,intx,inty,intd){
DataTypeelement;
element.x=x;
element.y=y;
element.d=d;
push_seq(st,element);
voidprintpath(PSeqStackst){
Thereverspathis:
/*打印路径上的每一点*/
while(!
isEmptyStack_seq(st)){
element=top_seq(st);
pop_seq(st);
thenodeis:
%d%d\n"
element.x,element.y);
/*迷宫maze[M][N]中求从入口maze[x1][y1]到出口maze[x2][y2]的一条路径*/
/*其中1<
=x1,x2<
=M-2,1<
=y1,y2<
=N-2*/
voidmazePath(intmaze[][N],intdirection[][2],intx1,inty1,intx2,inty2){
inti,j,k,g,h;
PSeqStackst;
st=createEmptyStack_seq();
maze[x1][y1]=2;
/*从入口开始进入,作标记*/
pushtostack(st,x1,y1,-1);
/*入口点进栈*/
while(!
isEmptyStack_seq(st)){/*走不通时,一步步回退*/
i=element.x;
j=element.y;
for(k=element.d+1;
k<
=3;
k++){/*依次试探每个方向*/
g=i+direction[k][0];
h=j+direction[k][1];
if(g==x2&
&
h==y2&
maze[g][h]==0){/*走到出口点*/
printpath(st);
/*打印路径*/
return;
if(maze[g][h]==0){/*走到没走过的点*/
maze[g][h]=2;
/*作标记*/
pushtostack(st,i,j,k);
/*进栈*/
i=g;
j=h;
k=-1;
/*下一点转换成当前点*/
Thepathhasnotbeenfound.\n"
/*栈退完未找到路径*/
intmain(){
intdirection[][2]={0,1,1,0,0,-1,-1,0};
intmaze[][N]={
1,1,1,1,1,1,1,1,1,1,1,
1,0,1,0,0,1,1,1,0,0,1,
1,0,0,0,0,0,1,0,0,1,1,
1,0,1,1,1,0,0,0,1,1,1,
1,0,0,0,1,0,1,1,0,1,1,
1,1,0,0,1,0,1,1,0,0,1,
1,1,1,0,0,0,0,0,0,0,1,
1,1,1,1,1,1,1,1,1,1,1
};
mazePath(maze,direction,1,1,6,9);
getchar();
return0;
3.应用实验
阅读所给的源程序,在实验报告中写出该程序的功能和运行结果。
(最好能写出每个子函数功能,以及重要语句的注释)
#include"
stdio.h"
#defineNULL0
#defineERROR0
#defineOK1
#defineOVERFLOW0
#defineSTACK_INIT_SIZE2
charlabel;
floattime;
}Car,Car2;
Car*top;
Car*base;
intstacksize;
}SqStack;
intInitStack(SqStack*S)
S->
base=(Car*)malloc(STACK_INIT_SIZE*sizeof(Car));
if(!
(S->
base))returnERROR;
top=S->
base;
stacksize=STACK_INIT_SIZE;
returnOK;
intStackEmpty(SqStackS)
if(S.top==S.base)
returnERROR;
intStackFull(SqStackS)
if(S.top-S.base>
=STACK_INIT_SIZE)
intPush(SqStack*S,Care)
if(S->
top-S->
base>
returnOVERFLOW;
{
*(S->
top++)=e;
intPop(SqStack*S,Car*e)
top==S->
base)
*e=*(--(S->
top));
Car2*top2;
Car2*base2;
intstacksize2;
}SqStack2;
intInitStack2(SqStack2*S2)
S2->
base2=(Car2*)malloc(STACK_INIT_SIZE*sizeof(Car2));
(S2->
top2))returnERROR;
top2=S2->
base2;
stacksize2=STACK_INIT_SIZE;
intPush2(SqStack2*S2,Car2e2)
if(S2->
top2-S2->
base2>
*(S2->
top2++)=e2;
intPop2(SqStack2*S2,Car2*e2)
top2==S2->
base2)
exit(OVERFLOW);
*e2=*(--(S2->
top2));
intStackEmpty2(SqStack2S2)
if(S2.top2==S2.base2)
typedefstructQNode
Cardata;
structQNode*next;
}QNode,*QueuePtr;
QueuePtrfront;
QueuePtrrear;
}LinkQueue;
intInitQueue(LinkQueue*Q)
Q->
front=Q->
rear=(QueuePtr)malloc(sizeof(QNode));
(Q->
front))returnERROR;
front->
next=NULL;
intEnQueue(LinkQueue*Q,Care)
QueuePtrp;
p=(QueuePtr)malloc(sizeof(QNode));
p)returnERROR;
p->
data=e;
rear->
next=p;
rear=p;
intQueueEmpty(LinkQueueQ)
if(Q.front==Q.rear)
intDeQueue(LinkQueue*Q,Car*e)
if(Q->
front==Q->
rear)returnERROR;
p=Q->
next;
*e=p->
data;
next=p->
rear==p
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验 指导书