数据结构实验报告一Word下载.docx
- 文档编号:8074577
- 上传时间:2023-05-10
- 格式:DOCX
- 页数:16
- 大小:121.68KB
数据结构实验报告一Word下载.docx
《数据结构实验报告一Word下载.docx》由会员分享,可在线阅读,更多相关《数据结构实验报告一Word下载.docx(16页珍藏版)》请在冰点文库上搜索。
5.对单链表的基本操作包括判断表是否为空、初始化、求元素个数、插入元素、删除元素、销毁单链表等。
五、程序流程分析:
本实验为线性表的基本操作,用到的思想比较简单,流程主要为顺序结构,顺序表和单链表的操作流程图都大致如下:
图1.顺序表操作流程图
根据题目要求,对链表的操作比顺序表仅仅只多了一项“清除所有结点”,这就要每删除一个节点都输出该结点值。
所以对链表的操作流程图知识在图1所示的顺序表操作流程图的基础上增添以下流程
图2.与顺序表操作相比,链表操作附加的流程图
六、实验源程序:
对顺序表和单链表的基本操作可以直接应用书中所给算法,包括初始化、求表长、删除元素、输出表中所有元素;
单链表还包括销毁表,这些基本操作及数据类型可以先编写入一个头文件中,如下所示:
对顺序表操作的头文件“shunxubiao.h”为:
#include<
stdio.h>
#definelistsize100
typedefintdatatype;
typedefstruct
{
datatypeitems[listsize];
intlength;
}sqlist;
intinitlist(sqlist*l)
l->
length=0;
return1;
}
intlistlength(sqlistl)
returnl.length;
intlistinsert(sqlist*l,intpos,datatypeitem)
inti;
if(l->
length>
=listsize)
{
printf("
表已满,无法插入!
"
);
return0;
}
if(pos<
=0||pos>
l->
length+1)
插入位置不合法!
for(i=l->
length-1;
i>
=pos-1;
i--)
l->
items[i+1]=l->
items[i];
items[pos-1]=item;
length++;
intlistdelete(sqlist*l,intpos,datatype*item)
1||pos>
length)
删除位置不合法!
*item=l->
items[pos-1];
for(i=pos;
i<
length;
i++)
items[i-1]=l->
length--;
intprintlist(sqlistl)
for(i=0;
l.length;
printf("
%d"
l.items[i]);
\n"
然后再在对顺序表进行操作的主程序中先包含头文件“shunxubiao.h”该主程序为:
#include"
shunxubiao.h"
#defineN10
intmain()
inti,item_in,pos_in,item_del,pos_del;
//item_in,pos_in用于输入插入的元素和位置,item_del用于返回删除元素,pos_del用于输入删除的元素
inta[N];
sqlistsxlist;
initlist(&
sxlist);
//初始化线性表
请输入%d个数字:
N);
//用户键入数据
N;
i++)
scanf("
%d"
&
a[i]);
i++)//将数据插入线性表
if(!
listinsert(&
sxlist,i+1,a[i]))
{
printf("
\n运行错误!
}
该线性表如下:
printlist(sxlist);
//将数据输出
该顺序表中的元素数为:
\n%d个\n"
listlength(sxlist));
//统计顺序表中D的元素数
\n请输入要插入的元素和位置:
scanf("
%d%d"
item_in,&
pos_in);
if(!
sxlist,pos_in,item_in))
\n插入操作错误!
\n插入元素后的线性表如下:
\n请输入要删除的元素的位置:
pos_del);
listdelete(&
sxlist,pos_del,&
item_del))
\n删除操作时运行错误!
\n删除的元素为:
\n%d\n"
item_del);
\n删除操作后的线性表如下:
单链表除了所包含的头文件中和主程序中变量名与顺序表的程序中的变量名不同外,其他都大致相同,只不过单链表所包含的头文件中多了一个基本操作:
即销毁单链表的同时输出所删除的元素。
程序如下:
voiddestroylist(linklisth)
inti=1;
pnodep=h;
h=h->
next;
free(p);
while(h)
第%d次删除的元素为:
%d\n"
i++,h->
data);
p=h;
h=h->
free(p);
这样在主程序的最后多加一句destroylist(h)调用语句,就可以完成对单链表的销毁操作。
单链表主程序所包含的头文件“xianxinglianbiao.h”如下:
#include<
malloc.h>
typedefstructnode
datatypedata;
structnode*next;
}lnode,*pnode,*linklist;
intinitlist(linklist*h)
*h=(linklist)malloc(sizeof(lnode));
h)
初始化链表错误!
(*h)->
next=NULL;
intlistlength(linklisth)
inttotal=0;
pnodep=h->
while(p)
total++;
p=p->
returntotal;
intlistinsert(linklisth,intpos_in,datatypeitem_in)
pnodep=h,q;
inti=0;
while(p&
&
pos_in-1)
i++;
p||i>
插入位置不合法!
q=(pnode)malloc(sizeof(lnode));
q)
不能生成新结点\n"
q->
data=item_in;
next=p->
p->
next=q;
intlistdelete(linklisth,intpos_del,datatype*item_del)
while(p->
next&
pos_del-1)
p->
next||i>
删除位置不合法!
q=p->
next=q->
*item_del=q->
data;
free(q);
voidprintlist(linklisth)
p->
单链表的主程序如下:
#include"
xianxinglianbiao.h"
#defineN6
//item_in,pos_in用于输入插入的元素和位置,item_del用于返回删除的元素,pos_del用于输入删除的位置
linklisth=NULL;
h);
listinsert(h,i+1,a[i]))
插入操作错误\n"
return0;
此链表的所有元素如下:
printlist(h);
listdelete(h,pos_del,&
\n删除操作后的链表如下:
listinsert(h,pos_in,item_in))
destroylist(h);
七、实验步骤
顺序表程序的实验步骤:
1.进行VisualStudio开发环境;
2.创建项目:
文件—新建—项目—WIN32项目—输入项目名称test1;
3.创建头文件和源文件,将预先编制好的程序输入;
4.保存文件;
5.选择调试—开始调试。
对于单链表程序实验步骤,与上述步骤相同,只是项目名称为test2,头文件和源文件的名称和上述顺序表的不同,输入的程序不同而已。
具体的调试过程,顺序表和单链表也是一样的,只需要根据程序调用时提示的语句操作,就可以完成对程序的测试,即先随意输入指定个数的数据,等待程序提示输入要插入的元素值和位置时再次输入,再次等到程序提示输入要删除元素的位置时,再次输入,最后就可以查看整个过程的运行结果,结果如下:
顺序表的程序的运行结果为:
图1.顺序表的程序运行结果
单链表的程序运行结果如下:
图2.单链表的程序运行结果
八、实验小结
本题实验是第一次数据结构实验,让我感觉到了数据结构所讲内容的特点,以及应用数据结构相关方法进行编程的优势,以前学完C语言以后进行编程,虽然也能完成功能,但是每一次编程都要做很多重复性的工作,即使每次编程所用的数据的结构相同,而这次实验用了一些书上的基本算法,这些算法的特点就是通用性很强,它们包括了对常用的数据类型的基本操作,需要用到这些操作的时候只需要对这些函数进行调用即可,大大减小了编程的工作量,可以将这些基本操作或函数编写如头文件中,以后再对这一类数据用到类似的操作时,一样可以直接调用,会节省很大的时间和精力,可以大大提高编程的效率。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验 报告