数据结构实验指导书源代码.docx
- 文档编号:1479767
- 上传时间:2022-10-22
- 格式:DOCX
- 页数:67
- 大小:46.69KB
数据结构实验指导书源代码.docx
《数据结构实验指导书源代码.docx》由会员分享,可在线阅读,更多相关《数据结构实验指导书源代码.docx(67页珍藏版)》请在冰豆网上搜索。
数据结构实验指导书源代码
实验一线性表的链式存储结构
一、实验目的:
1.掌握线性表的链式存储结构。
2.熟练地利用链式存储结构实现线性表的基本操作。
3.能熟练地掌握链式存储结构中算法的实现。
二、实验内容:
1.用头插法或尾插法建立带头结点的单链表。
2.实现单链表上的插入、删除、查找、修改、计数、输出等基本操作。
三、实验要求:
1.根据实验内容编写程序,上机调试、得出正确的运行程序。
2.写出实验报告(包括源程序和运行结果)。
四、实验学时:
2学时
五、实验步骤:
1.进入编程环境,建立一新文件;
2.参考以下相关内容,编写程序,观察并分析输出结果。
①定义单链表的数据类型,然后将头插法和尾插法、插入、删除、查找、修改、计数、输出等基本操作都定义成子函数的形式,最后在主函数中调用它,并将每一种操作前后的结果输出,以查看每一种操作的效果。
②部分参考程序
//单链表的建立(头插法),插入,删除,查找、修改、计数、输出
#include
#defineelemtypeint
structlink
{elemtypedata;//元素类型
link*next;//指针类型,存放下一个元素地址
};
//头插法建立带头结点的单链表
link*hcreat()
{links,p;
elemtypei;
cout<<”输入多个结点数值(用空格分隔),为0时算法结束”;
cin>>i;
p=newlink;
p->next=NULL;
while(i)//当输入的数据不为0时,循环建单链表
{s=newlink;
s->data=i;
s->next=p->next;
p->next=s;
cin>>i;}
returnp;
}
//输出单链表
voidprint(1ink*head)
{
1ink*p;
p=head->next;
while(p->next!
=NULL)
{
cout<
p=p->next;
}
cout<
cout< } ∥在单链表head中查找值为x的结点 Link*Locate(1ink*head,elemtypex) { Link*p; p=head->next; while((p! =NULL)&&(p->data! =x)) p=p->next; returnp;} //在head为头指针的单链表中,删除值为x的结点 voiddeletel(1ink*head,elemtypex) { 1ink*p,*q; q=head; p=head->next; while((p! =NULL)&&(p->data! =x)) { q=p; p=p->next;} If(p==NULL)cout<<“要删除的结点不存在”; else q->next=p->next; delete(p); } } //在头指针head所指的单链表中,在值为x的结点之后插入值为y的结点 voidinsert(1ink*head,elemtypex,elemtypey) {link*p,*s; s=newlink; s->data=y; if(head->next==NULL)//链表为空 { head->next=s; s->next=NULL: } p=Locate(head,x);//调用查找算法‘ if(p==NULL) cout<<”插入位置非法”: else (s->next=p->next; p->next=s; } } //将单链表p中所有值为x的元素修改成y voidchange(1ink*p,elemtypex,elemtypey) { link*q; q=p->next; while(q! =NULL) {if(q->data==x)q->data=y; q=q->next; } } voidcount(1ink*h)//统计单链表中结点个数 { 1ink*p;intn=0; p=h->next; while(p! =NULL) {n++;p=p->next;} returnn; } voidmain() {intn; elemtypex,y; link*p,*q; p=hcreat();//头插法建立链表 print(p);//输出刚建立的单链表 cout<<”请输入要删除的元素”; cin>>y; deletel(p,y); print(p);//输出删除后的结果 cout<<”请输入插入位置的元素值(将待插元素插入到它的后面)”; cin>>x; cout<<”请输入待插元素值”; cin>>y; insert(p,x,y); print(p);//输出插入后的结果 cout<<”请输入要修改前、后的元素值”; cin>>x>>y; change(p,x,y); print(p); cout<<”请输入要查找的元素值”; cin>>x; q=Locate(p,x); if(q==NULL)cout< ”< elsecout< ”< n=count(p); cout<<”链表中结点个数为: ”< } //单链表的建立(尾插法)、插入、删除、查找、修改、计数、输出 #include #defineelemtypeint structlink {elemtypedata;//元素类型 link*next;//指针类型,存放下-个元素地址 }; //尾插法建立带头结点的单链表 link*rcreat() {link*s,*p,*r; elemtypei; cout<<”输入多个结点数值(用空格分隔),为0时算法结束”; cin>>i; p=r=newlink; p->next=NULL; while(i) {s=newlink; s->data=i; r->next=s; r=s; cin>>i;} r->next=NULL; returnp; } //输出单链表 voidprint(1ink*head) {link*p; p=head->next; while(p->next! =NULL) { cout< p=p->next; ) cout< cout< } link*Locate(1ink*head,intx)∥在单链表中查找第x个结点 {link*p; p=head; intj=0; while((p! =NULL)&&(j {p=p->next;j++;} returnp; } voiddeleteI(1ink*head,elemtypex) //在head为头指针的单链表中,删除值为x的结点 { link*p,*q; q=head; p=head->next; while((p! =NULL)&&(p->data! =x)) { q=p; p=p->next;) if(p==NULL)cout<<”要删除的结点不存在“; else { q->next=p->next; delete(p); }} voidinsert(1ink*head,intx,elemtypey) //在头指针head所指单链表中,在第x个结点之后插入值为y的结点 {link*p,*s; s=newlink; s->data=y; if(head->next==NULL)//链表为空 { head->next=s; s->next=NULL: } p=Locate(head,x);//调用查找算法 if(p==NULL) cout<<”插入位置非法”; else {s->next=p->next; p->next=s; }} voidchange(1ink*p,elemtypex,elemtypey) {∥将单链表P中所有值为x的元素改成值为y link*q; q=p->next; while(q! =NULL) {if(q->data==x)q->data=y; q=q->next; } } voidcount(1ink*h)//统计单链表中结点个数 (1ink*p;intn=0; p=h->next; while(p! =NULL) {n++;p=p->next;} retumn; } voidmain() {intn; linkp,q; p=rcreat();//尾插法建立链表 print(p);//输出刚建立的单链表 cout<<”请输入要删除的元素”; cin>>y; deletel(p,y); print(p);//输出删除后的结果 cout<<”请输入插入位置”; cin>>x; cout<<”请输入待插元素值”; cin>>y; insert(p,x,y); print(p);//输出插入后的结果 cout<<”请输入修改前、后的元素值”; cin>>x>>y; change(p,x,y); print(p); cout<<“请输入要查找的元素值”; cin>>x; q=Locate(p,x); if(q==NULL)cout< ”< elsecout< ”< n=count(p); cout<<”链表中结点个数为: ”< } 六、选作实验 试设计一元多项式相加(链式存储)的加法运算。 A(X)=7+3X+9X8+5X9 B(X)=8X+22X7-9X8 1.建立一元多项式; 2.输出相应的一元多项式; 3.相加操作的实现。 实验二循环链表的操作 一、实验目的: 通过本实验中循环链表和双向链表的使用,使学生进一步熟练掌握链表的操作方式。 二、实验内容: 本次实验可以从以下两个实验中任选一个: 1.建立一个单循环链表并实现单循环链表上的逆置。 所谓链表的逆置运算(或称为逆转运算)是指在不增加新结点的前提下,依次改变数据元素的逻辑关系,使得线性表(al,a2,a3,…,an)成为(an,…,a3,a2,a1)。 2.构建一个双向链表,实现插入、查找和删除操作。 三、实验要求: 1.根据实验内容编写程序,上机调试、得出正确的运行程序。 2.写出实验报告(包括源程序和运行结果)。 四、实验学时: 2学时 五、实验步骤: 1.进入编程环境,建立一新文件; 2.参考以下相关内容,编写程序,观察并分析输出结果。 ①建立一个带头结点的单循环链表,从
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验 指导书 源代码