数据结构实验指导书C语言版刘高文Word下载.docx
- 文档编号:22946136
- 上传时间:2023-02-06
- 格式:DOCX
- 页数:72
- 大小:33.34KB
数据结构实验指导书C语言版刘高文Word下载.docx
《数据结构实验指导书C语言版刘高文Word下载.docx》由会员分享,可在线阅读,更多相关《数据结构实验指导书C语言版刘高文Word下载.docx(72页珍藏版)》请在冰豆网上搜索。
实验方式:
编写程序、上机运行通过。
五.
实验环境:
1、硬件最低要求
能正常运行VC++6.0的机器,每个学生每次上机实验能使用一台计算机。
2、软件
C语言或VisualC++6.0
六.
实验项目及安排
实验名称
学时数
实验1线性表操作
1.线性表在顺序存储结构上的插入元素,删除元素运算
2.线性表在链式存储结构上的建链表,插入结点,删除结点运算
4
实验2栈和队列的应用
1.顺序栈的实现和运算
2.链栈的实现和运算
3.顺序队列的实现和运算
4.链式队列的实现和运算
5.循环队列的实现和运算
6
实验3多维数组和串
1.稀疏矩阵的存储及转置运算
2.串的基本操作
2
实验4树和二叉树的操作
1.二叉树的实现和运算
2.线索二叉树的实现
3.哈夫曼树的实现
实验5图的操作
1.图的遍历
2.最小生成树
3.最短路径
4.每一对顶点之间的最短路径
5.拓扑排序
实验6各种查找操作
1.线性表查找
2.查找树的实现
3.哈希表查找的实现
实验7各种排序操作
各种排序方法的实现
实验一、线性表操作
一、实验目的
1.掌握用C语言调试程序的基本方法。
2.掌握线性表的基本运算,如插入、删除等。
二、实验内容
1.线性表在顺序存储结构上的插入元素,删除元素运算
2.线性表在链式存储结构上的建链表,插入结点,删除结点运算
三、实验要求
1.C++/C完成算法设计和程序设计并上机调试通过。
2.撰写实验报告,提供实验结果和数据。
3.
分析算法,要求给出具体的算法分析结果,包括时间复杂度和空间复杂度,并简要给出算法设计小结和心得。
四、程序实现
写出每个操作的算法(操作过程)
五、程序运行情况
写出输入数据及运行结果
六、源程序清单。
程序1:
顺序存储的线性表和运算
#include<
stdio.h>
#defineMAXSIZE100
intlist[MAXSIZE];
intn;
/*insertinaseqlist*/
intsq_insert(intlist[],int*p_n,inti,intx)
{intj;
if(i<
0||i>
*p_n)return
(1);
if(*p_n==MAXSIZE)return
(2);
for(j=*p_n+1;
j>
i;
j--)
list[j]=list[j-1];
list[i]=x;
(*p_n)++;
return(0);
}
/*deleteinaseqlist*/
intsq_delete(intlist[],int*p_n,inti)
{intj;
=*p_n)return
(1);
for(j=i+1;
j<
=*p_n;
j++)
list[j-1]=list[j];
(*p_n)--;
voidmain()
{inti,x,temp;
printf("
pleaseinputthenumberforn\n"
);
n="
scanf("
%d"
&
n);
for(i=0;
i<
=n;
i++)
{printf("
list[%d]="
i);
scanf("
list[i]);
}
Thelistbeforeinsertionis\n"
i++)printf("
%d"
list[i]);
\n"
pleaseinputthepositionwhereyouwanttoinsertavalue\nposition="
i);
pleaseinputthevalueyouwanttoinsert.\nx="
x);
temp=sq_insert(list,&
n,i,x);
switch(temp)
{case0:
printf("
Theinsertionissuccessful!
printf("
Thelistisafterinsertionis\n"
for(i=0;
%d\n"
n);
break;
case1:
case2:
Theinsertionisnotsuccessful!
break;
/*deleting*/
Thelistbeforedeletingis\n"
pleaseinputthepositionwhereyouwanttodeleteavalue\nposition="
temp=sq_delete(list,&
n,i);
Thedeletingissuccessful!
Thelistisafterdeletingis\n"
Thedeletingisnotsuccessful!
"
程序2链式存储的线性表和运算
malloc.h>
structnode{
chardata;
structnode*next;
};
typedefstructnodeNODE;
/*Thisfunctioncreatesalink_listwithNnodes.*/
NODE*create_link_list(intn)
{inti;
NODE*head,*p,*q;
if(n==0)returnNULL;
head=(NODE*)malloc(sizeof(NODE));
p=head;
Pleaseinput%dcharsforthelinklist\n"
n;
{scanf("
%c"
&
(p->
data));
q=(NODE*)malloc(sizeof(NODE));
test3\n"
p->
next=q;
p=q;
getchar();
p->
next=NULL;
return(head);
/*Thisfunctioninsertsanodewhosevalueisb*/
/*beforethenodewhosevalueisa,ifthenodeisnotexist,*/
/*theninsertitattheendofthelist*/
voidinsert(NODE**p_head,chara,charb)
{NODE*p,*q;
q=(NODE*)malloc(sizeof(NODE));
q->
data=b;
next=NULL;
if(*p_head==NULL)*p_head=q;
else
{p=(NODE*)malloc(sizeof(NODE));
p=*p_head;
while(p->
data!
=a&
&
next!
=NULL)
p=p->
next;
q->
next=p->
next=q;
/*Thefunctiondeletesthenodewhosevalueisa,*/
/*ifsuccess,return0,orreturn1*/
intdeletenode(NODE**p_head,chara)
q=*p_head;
if(q==NULL)return
(1);
if(q->
data==a)
{*p_head=q->
free(q);
return(0);
{while(q->
{p=q;
q=q->
if(q->
{p->
next=q->
free(q);
return(0);
elsereturn
(1);
{NODE*my_head,*p;
/*createalinklistwithmnodes*/
intm;
charch_a,ch_b;
pleaseinputthenumberofnodesforthelink_list\nm="
m);
test1\n"
my_head=(NODE*)malloc(sizeof(NODE));
my_head=create_link_list(m);
/*Outputthelinklist*/
Thelinklistislike:
p=my_head;
while(p!
p->
data);
p=p->
}
/*insertanodewhosevalueisbbeforea*/
Pleaseinputthepositionfora\nch_a="
%c"
ch_a);
Pleaseinputthevaluethatyouwanttoinsert\nch_b="
ch_b);
insert(&
my_head,ch_a,ch_b);
Thelinklistafterinsertionislike:
/*deleteanodewhosevalueisa*/
Pleaseinputthepositionforaa="
deletenode(&
my_head,ch_a);
Thelinklistafterdeletingislike:
实验二、栈和队列的应用
1、掌握栈的特点(先进后出FILO)及基本操作,如入栈、出栈等,栈的顺序存储结构和链式存储结构,以便在实际问题背景下灵活应用。
2、掌握队列的特点(先进先出FIFO)及基本操作,如入队、出队等,队列顺序存储结构、链式存储结构和循环队列的实现,以便在实际问题背景下灵。
1.顺序栈的实现和运算
2.链栈的实现和运算
3.顺序队列的实现和运算
4.链式队列的实现和运算
5.循环队列的实现和运算
1.用C++/C完成算法设计和程序设计并上机调试通过。
3.分析算法,要求给出具体的算法分析结果,包括时间复杂度和空间复杂度,并简要给出算法设计小结和心得。
程序运行情况
五、写出输入数据及运行结果
顺序栈的实现和运算
#defineMAXN26
charstack[MAXN];
inttop=0;
intpush(charx)
{if(top>
=MAXN)
return
(1);
stack[top++]=x;
intpop(char*p_y)
{if(top==0)
*p_y=stack[--top];
{inti;
charch_x,ch_y;
inputthecharyouwanttopush\n"
ch_x);
while(ch_x!
='
0'
)
if(push(ch_x)==1)printf("
failure!
else
{printf("
success!
printf("
inputacharforch_xtopush\nch_x="
getchar();
scanf("
i=0;
while(stack[i]!
\0'
stack[i]);
i++;
if(pop(&
ch_y)==1)printf("
Thepopcharis%c\n"
ch_y);
for(i=top-1;
i>
=0;
i--)
程序2:
链栈的实现和运算
#include<
structnode{chardata;
structnode*link;
};
NODE*top=NULL;
voidpush_l(charx)
{NODE*p;
p=(NODE*)malloc(sizeof(NODE));
data=x;
link=top;
top=p;
intpop_l(char*p_y)
if(top==NULL)
return
(1);
*p_y=top->
data;
p=top;
top=top->
link;
free(p);
{NODE*p;
{push_l(ch_x);
getchar();
p=(NODE*)malloc(sizeof(NODE));
p=top;
while(p!
=NULL)
if(pop_l(&
程序3:
顺序队列的实现和运算
charq[MAXN];
inthead=-1,tail=-1;
inten_queue(charx)
{if(tail==MAXN-1)
q[++tail]=x;
intde_queue(char*p_y)
{if(head==tail)
*p_y=q[++head];
inputthecharyouwanttoenqueue\n"
if(en_queue(ch_x)==1)printf("
inputacharforch_xtoenqueue\nch_x="
i=1;
while(q[i]!
q[i]);
if(de_queue(&
Thedequeuecharis%c\n"
for(i=head+1;
=tail;
程序4:
链式队列的实现和运算
structnode*link;
NODE*head,*tail;
voiden_queue_l(charx)
p=(NODE*)malloc(sizeof(NODE));
link=NULL;
if(head==NULL)
head=p;
tail->
link=p;
tail=p;
intde_queue_l(char*p_y)
*p_y=head->
head=head->
{en_queue_l(ch_x);
p=head;
if(de_queue_l(&
printf
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验 指导书 语言版 刘高文