数据结构实验指导书及答案徐州工程学院.docx
- 文档编号:25950319
- 上传时间:2023-06-16
- 格式:DOCX
- 页数:84
- 大小:435.09KB
数据结构实验指导书及答案徐州工程学院.docx
《数据结构实验指导书及答案徐州工程学院.docx》由会员分享,可在线阅读,更多相关《数据结构实验指导书及答案徐州工程学院.docx(84页珍藏版)》请在冰豆网上搜索。
数据结构实验指导书及答案徐州工程学院
《数据结构实验》实验指导书及答案
信电工程学院计算机科学和技术教研室编
2011.12
数据结构实验所有代码整理
作者郑涛
声明:
在这里我整理了数据结构实验的所有代码,希望能对大家的数据结构实验的考试有所帮助,大家可以有选择地浏览,特别针对一些重点知识需要加强记忆(ps:
重点知识最好让孙天凯给出),希望大家能够在数据结构实验的考试中取得令人满意的成绩,如果有做的不好的地方请大家谅解并欢迎予以指正。
实验一熟悉编程环境
实验预备知识:
1.熟悉本课程的语言编译环境(TC或VC),能够用C语言编写完整的程序,并能够发现和改正错误。
2.能够灵活的编写C程序,并能够熟练输入C程序。
一、实验目的
1.熟悉C语言编译环境,掌握C程序的编写、编译、运行和调试过程。
2.能够熟练的将C程序存储到指定位置。
二、实验环境
⒈硬件:
每个学生需配备计算机一台。
⒉软件:
Windows操作系统+TurboC;
三、实验要求
1.将实验中每个功能用一个函数实现。
2.每个输入前要有输入提示(如:
请输入2个整数当中用空格分割:
),每个输出数据都要求有内容说明(如:
280和100的和是:
380。
)。
3.函数名称和变量名称等用英文或英文简写(每个单词第一个字母大写)形式说明。
四、实验内容
1.在自己的U盘中建立“姓名+学号”文件夹,并在该文件夹中创建“实验1”文件夹(以后每次实验分别创建对应的文件夹),本次实验的所有程序和数据都要求存储到本文件夹中(以后实验都按照本次要求)。
2.编写一个输入某个学生10门课程成绩的函数(10门课程成绩放到结构体数组中,结构体包括:
课程编号,课程名称,课程成绩)。
3.编写一个求10门成绩中最高成绩的函数,输出最高成绩和对应的课程名称,如果有多个最高成绩,则每个最高成绩均输出。
4.编写一个求10门成绩平均成绩的函数。
5.编写函数求出比平均成绩高的所有课程及成绩。
#include
#include
structsubject
{
intsubject_id;
charsubject_name[20];
doublesubject_grades;
};
structsubjectsub[10];
voidinput()
{
inti;
printf("pleaseinput:
\n");
for(i=0;i<10;i++)
{
scanf("%d%s%lf",&sub[i].subject_id,&sub[i].subject_name,&sub[i].subject_grades);
}
printf("youjustinput:
\n");
for(i=0;i<3;i++)
{
printf("%d%s%lf\n",sub[i].subject_id,sub[i].subject_name,sub[i].subject_grades);
}
}
voidsubject_max()
{
inti,flag;
doublemax=sub[0].subject_grades;
for(i=0;i<10;i++)
{
if(sub[i].subject_grades>max)
max=sub[i].subject_grades;
flag=i;
}
printf("Thehighscoreofsubjectis%s%lf\n",sub[flag].subject_name,max);
}
voidsubject_average()
{
inti;
doubleaverage,sum=sub[0].subject_grades;
for(i=1;i<10;i++)
{
sum+=sub[i].subject_grades;
}
average=sum/10;
printf("subject'saverageis%lf\n",average);
}
voidsubjct_gtaverage()
{
inti,flag;
doubleaverage,sum=sub[0].subject_grades;
for(i=1;i<10;i++)
{
sum+=sub[i].subject_grades;
}
average=sum/10;
for(i=0;i<10;i++)
{
if(sub[i].subject_grades>average)
{
flag=i;
printf("subjectgreaterthanaverageis%s%lf\n",sub[flag].subject_name,sub[flag].subject_grades);
}
}
}
intmain()
{
input();
subject_max();
subject_average();
subjct_gtaverage();
return0;
}
实验二顺序表的基本操作
实验预备知识:
1.熟练运用数组进行程序设计,掌握数组名和指针作为函数参数。
2.掌握结构体和结构体数组的访问与使用。
3.熟练实现顺序表类型和变量(如下所示)定于、熟悉顺序表的访问原理(顺序存储、随机访问)。
一、实验目的
1.掌握顺序表的建立、数据元素的插入和删除、掌握数据元素的访问。
2.能够熟练的使用函数来实现顺序表的各种操作。
二、实验环境
⒈硬件:
每个学生需配备计算机一台。
⒉软件:
Windows操作系统+TurboC;
三、实验要求
1.定义一顺序表类型,并定义顺序表。
2.将教材中顺序表的建立、初始化、插入、删除等函数实现。
3.顺序表能够存储10名学生的基本信息(包括姓名、学号和成绩)。
4.由主函数按照用户要求对各个顺序表操作访问。
5.每次操作之前要有明确的说明,操作后要输出操作结果。
6.分析顺序表的插入、删除、查找的时间和空间复杂度。
四、实验内容
1.在自己的U盘的“姓名+学号”文件夹中创建“实验2”文件夹,本次实验的所有程序和数据都要求存储到本文件夹中。
2.完成顺序表操作的如下函数:
建立,初始化,增加,插入,删除。
#include"stdio.h"
#include"malloc.h"
#include"string.h"
#defineLIST_INIT_SIZE1
#defineLISTINCREMENT1
structstu
{charname[6];
charnum[3];
intcj;};
structsqlist
{structstu*elem;
intlength;
intlistsize;};
voidmain()
{structsqlist*initlist_hc();
voidcshlist_hc(structsqlist*l);
voidlistinsert_hc(structsqlist*l);
voidlistdelete_hc(structsqlist*l);
voidlisthb_hc(structsqlist*l1,structsqlist*l2,structsqlist*l3);
structsqlist*l1,*l2,*l3;
charf;inti,k=0;
printf("请选择对顺序表的操作,操作菜单如下:
\n");
for(i=0;i<80;i++)printf("*");
printf("建立顺序表(C)\n");
printf("初始化顺序表(N)\n");
printf("顺序表中插入元素(I)\n");
printf("顺序表中删除元素(D)\n");
printf("合并顺序表(H)\n");
printf("退出系统(E)\n");
for(i=0;i<80;i++)printf("*");
do
{printf("输入大写字母按Enter确定:
");
flushall();
f=getchar();
if(f=='C')
{if(k==0)l1=initlist_hc();
else{l2=initlist_hc();}
k++;}
elseif(f=='N')
{if(k==1)cshlist_hc(l1);elsecshlist_hc(l2);}
elseif(f=='I')
{if(k==1)listinsert_hc(l1);elselistinsert_hc(l2);}
elseif(f=='D')
{if(k==1)listdelete_hc(l1);elselistdelete_hc(l2);}
elseif(f=='H')
{l3=initlist_hc();
listhb_hc(l1,l2,l3);}
}while(f!
='E');}
structsqlist*initlist_hc()
{structsqlist*l;
l=(structsqlist*)malloc(sizeof(structsqlist));
if(!
l)printf("出错!
\n");
return(l);}
voidcshlist_hc(structsqlist*l)
{structstu*newbase;
voidprintlist_hc(structsqlist*l);
charx[6],y[3];intz;
l->elem=(structstu*)malloc(LIST_INIT_SIZE*sizeof(structstu));
if(!
l->elem)printf("出错!
\n");
l->length=0;
l->listsize=LIST_INIT_SIZE;
printf("请输入信息以-1结束:
\n");
scanf("%s%s%d",x,y,&z);
while(z!
=-1)
{if(l->length==l->listsize)
{newbase=(structstu*)realloc(l->elem,(l->listsize+LISTINCREMENT)*sizeof(structstu));
if(!
newbase)printf("出错!
\n");
l->elem=newbase;l->listsize+=LISTINCREMENT;}
strcpy(l->elem[l->length].name,x);
strcpy(l->elem[l->length].num,y);
l->elem[l->length].cj=z;
scanf("%s%s%d",x,y,&z);
if(z!
=-1)l->length++;}
printlist_hc(l);}
voidlistinsert_hc(structsqlist*l)
{inti,j;
structstu*newbase;
voidprintlist_hc(structsqlist*l);
if(l->length==l->listsize)
{newbase=(structstu*)realloc(l->elem,(l->listsize+LISTINCREMENT)*sizeof(structstu));
if(!
newbase)printf("出错!
\n");
l->elem=newbase;l->listsize+=LISTINCREMENT;}
printf("输入要插入信息的位置:
");
scanf("%d",&j);j--;
for(i=l->length;i>=j;i--)
{strcpy(l->elem[i+1].name,l->elem[i].name);
strcpy(l->elem[i+1].num,l->elem[i].num);
l->elem[i+1].cj=l->elem[i].cj;}
printf("输入插入信息:
\n");
scanf("%s%s%d",l->elem[j].name,l->elem[j].num,&l->elem[j].cj);
l->length++;
printlist_hc(l);}
voidlistdelete_hc(structsqlist*l)
{voidprintlist_hc(structsqlist*l);
inti,j;
printf("输入删除信息的位置:
");
scanf("%d",&j);j--;
printf("删除的信息为:
%s,%s,%d\n",l->elem[j].name,l->elem[j].num,l->elem[j].cj);
for(i=j+1;i<=l->length;i++)
{strcpy(l->elem[i-1].name,l->elem[i].name);
strcpy(l->elem[i-1].num,l->elem[i].num);
l->elem[i-1].cj=l->elem[i].cj;}
l->length--;
printlist_hc(l);}
voidlisthb_hc(structsqlist*l1,structsqlist*l2,structsqlist*l3)
{voidprintlist_hc(structsqlist*l);
structstu*p1,*p2,*p3;
structstu*p1_last,*p2_last;
p1=l1->elem;p2=l2->elem;
l3->length=l1->length+l2->length+1;
l3->listsize=l1->length+l2->length+2;
p3=l3->elem=(structstu*)malloc(l3->listsize*sizeof(structstu));
if(!
l3->elem)printf("出错!
\n");
p1_last=l1->elem+l1->length;
p2_last=l2->elem+l2->length;
while(p1<=p1_last&&p2<=p2_last)
{if(p1->cj>p2->cj)
{strcpy(p3->name,p1->name);
strcpy(p3->num,p1->num);
p3->cj=p1->cj;p1++;p3++;}
else
{strcpy(p3->name,p2->name);
strcpy(p3->num,p2->num);
p3->cj=p2->cj;p2++;p3++;}
}
while(p1<=p1_last)
{strcpy(p3->name,p1->name);
strcpy(p3->num,p1->num);
p3->cj=p1->cj;p1++;p3++;}
while(p2<=p2_last)
{strcpy(p3->name,p2->name);
strcpy(p3->num,p2->num);
p3->cj=p2->cj;p2++;p3++;}
printlist_hc(l3);}
voidprintlist_hc(structsqlist*l)
{inti;
printf("当前表中信息如下:
\n");
for(i=0;i<=l->length;i++)
{printf("%s,%s,%d\n",l->elem[i].name,l->elem[i].num,l->elem[i].cj);}}
实验三单链表的基本操作
实验预备知识:
1.熟练运用指针进行程序设计,掌握结构体指针。
2.掌握使用结构体指针访问结构体变量。
3.掌握指针作为函数的参数使用。
4.理解单链表的含义、目的和处理方法。
一、实验目的
1.掌握线性表的链式存贮结构及基本操作,深入了解链表的基本特性,以便在实际问题背景下灵活运用它们。
2.巩固该存贮结构的构造方法,深入理解和灵活掌握链表的插入、删除等操作。
二、实验环境
⒈硬件:
每个学生需配备计算机一台。
操作系统:
DOS或Windows;
⒉软件:
DOS或Windows操作系统+TurboC;
三、实验要求
1.定义一链表类型,并定义带有头结点的单链表。
2.将教材中链表的建立、初始化、插入、删除等函数实现。
3.链表能够存储10名学生的基本信息(包括姓名、学号和成绩)。
4.由主函数按照用户要求对各个链表操作访问。
5.每次操作之前要有明确的说明,操作后要输出操作结果。
6.分析顺序表链表的插入、删除、查找的时间和空间复杂度。
四、实验内容
1.在自己的U盘的“姓名+学号”文件夹中创建“实验3”文件夹,本次实验的所有程序和数据都要求存储到本文件夹中。
2.完成链表操作的如下函数:
建立,初始化,增加,插入,删除。
//链表插入、删除、合并
#include"stdio.h"
#include"string.h"
#include"malloc.h"
#defineLENsizeof(structlnode_hc)
#defineLEN1sizeof(structhc_stu)
structhc_stu
{charname[3];
charnum[3];
intcj;
};
structlnode_hc
{structhc_stu*data;
structlnode_hc*next;
};
voidmain()
{structlnode_hc*jll();
voidcshl(structlnode_hc*head);
voidcrl(structlnode_hc*head);
voidscl(structlnode_hc*head);
voidhbl(structlnode_hc*h1,structlnode_hc*h2,structlnode_hc*h3);
structlnode_hc*h1,*h2,*h3;
charf;inti,k=0;
printf("请选择对链表的操作,操作菜单如下:
\n");
for(i=0;i<80;i++)printf("*");
printf("建立链表(C)\n");
printf("初始化链表(N)\n");
printf("链表中插入元素(I)\n");
printf("链表中删除元素(D)\n");
printf("合并链表(H)\n");
printf("退出系统(E)\n");
for(i=0;i<80;i++)printf("*");
do
{printf("输入大写字母按Enter确定:
");
flushall();
f=getchar();
if(f=='C')
{if(k==0)h1=jll();
elseh2=jll();
k++;}
elseif(f=='N')
{if(k==1)cshl(h1);elsecshl(h2);}
elseif(f=='I')
{if(k==1)crl(h1);elsecrl(h2);}
elseif(f=='D')
{if(k==1)scl(h1);elsescl(h2);}
elseif(f=='H')
{h3=jll();
hbl(h1,h2,h3);}
}while(f!
='E');
}
structlnode_hc*jll()
{structlnode_hc*head;
head=(structlnode_hc*)malloc(LEN);
if(!
head)printf("出错!
\n");
head->next=NULL;
return(head);}
voidcshl(structlnode_hc*head)
{voidprintl(structlnode_hc*head);
charx[3],y[3];intz;
structlnode_hc*p1=head,*p2;
printf("请输入信息以-1结束:
\n");
scanf("%s%s%d",x,y,&z);
while(z!
=-1)
{p2=(structlnode_hc*)malloc(LEN);
if(!
p2)printf("出错!
\n");
p2->data=(structhc_stu*)malloc(LEN1);
if(!
p2->data)printf("出错!
\n");
strcpy(p2->data->name,x);
strcpy(p2->data->num,y);
p2->data->cj=z;
p2->next=NULL;
p1->next=p2;
p1=p2;
scanf("%s%s%d",x,y,&z);}
printl(head);}
voidcrl(structlnode_hc*head)
{voidprintl(structlnode_hc*head);
intj;
structlnode_hc*p,*p1=head;
printf("请输入要插入信息的位置:
");
scanf("%d",&j);
while(j-->1)p1=p1->next;
p=(structlnode_hc*)malloc(LEN);
if(!
p)printf("出错!
\n");
p->data=(structhc_stu*)malloc(LEN1);
if(!
p->data)printf("出错!
\n");
printf("请输入要插入的信息:
\n");
scanf("%s%s%d",p->data->name,p->data->num,&p->data->cj);
p->next=p1->next;p1->next=p;
printl(head);}
voidscl(structlnode_hc*head)
{voidprintl(structlnode_hc*head);
intj;
structlnode_hc*p1=head,*p2=head->next;
printf("请输入要删除信息的位置:
");
scanf("%d",&j);
while(j>1)
{p1=p1->next;
p2=p2->next;
j--;}
printf("删除的信息为:
%s,%s,%d\n",p2->data->name,p2->data->num,p2->data->cj);
p1->next=p2->next;free(p2);
printl(head);}
voidhbl(structlnode_hc*h1,structlnode_hc*h2,structlnode_hc*h3)
{structlnode_hc*p1,*p2,*p3;
p1=h1->next;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验 指导书 答案 徐州 工程学院