数据结构完整题目及答案1.docx
《数据结构完整题目及答案1.docx》由会员分享,可在线阅读,更多相关《数据结构完整题目及答案1.docx(57页珍藏版)》请在冰豆网上搜索。
![数据结构完整题目及答案1.docx](https://file1.bdocx.com/fileroot1/2023-1/31/eabcfdc1-7aaf-4491-a90c-5a8b404a1e57/eabcfdc1-7aaf-4491-a90c-5a8b404a1e571.gif)
数据结构完整题目及答案1
数据结构与算法
实验报告
实验一学生成绩分析程序............................................4
1.1上机实验的问题和要求(需求分析):
.....................................4
1.2程序设计的基本思想,原理和算法描述:
..................................4
1.3调试和运行程序过程中产生的问题及采取的措施:
...........................4
1.4运行输出结果:
.........................................................4
1.5源程序及注释:
........................................................5
实验二线性表的基本操作............................................8
2.1上机实验的问题和要求(需求分析):
......................................8
2.2程序设计的基本思想,原理和算法描述:
..................................8
2.3调试和运行程序过程中产生的问题及采取的措施:
...........................8
2.4运行输出结果:
.........................................................8
2.5源程序及注释:
........................................................8
实验三链表的基本操作..............................................11
3.1上机实验的问题和要求(需求分析):
.....................................11
3.2程序设计的基本思想,原理和算法描述:
.................................11
3.3调试和运行程序过程中产生的问题及采取的措施:
..........................11
3.4运行输出结果:
........................................................11
3.5源程序及注释:
.......................................................11
实验四单链表综合实验.........................................14
4.1上机实验的问题和要求(需求分析):
....................................14
4.2程序设计的基本思想,原理和算法描述:
................................14
4.3调试和运行程序过程中产生的问题及采取的措施:
.........................14
4.4运行输出结果:
.......................................................14
4.5源程序及注释:
.....................................................14
实验五串.........................................................19
5.1上机实验的问题和要求(需求分析):
...................................19
5.2程序设计的基本思想,原理和算法描述:
...............................19
5.3调试和运行程序过程中产生的问题及采取的措施:
........................19
5.4运行输出结果:
......................................................19
5.5源程序及注释:
.....................................................21
实验六循环队列的实现与运算.................................22
6.1上机实验的问题和要求(需求分析):
...................................22
6.2程序设计的基本思想,原理和算法描述:
...............................22
6.3调试和运行程序过程中产生的问题及采取的措施:
........................22
6.4运行输出结果:
......................................................22
6.5源程序及注释:
.....................................................23
实验七栈子系统..................................................26
7.1上机实验的问题和要求(需求分析):
...................................26
7.2程序设计的基本思想,原理和算法描述:
...............................26
7.3调试和运行程序过程中产生的问题及采取的措施:
........................26
7.4运行输出结果:
......................................................26
7.5源程序及注释:
.....................................................28
实验八树...........................................................36
8.1上机实验的问题和要求(需求分析):
..................................36
8.2程序设计的基本思想,原理和算法描述:
..............................39
8.3调试和运行程序过程中产生的问题及采取的措施:
.......................39
8.4运行输出结果:
.....................................................39
8.5源程序及注释:
.....................................................41
实验九建立哈夫曼树与哈夫曼树与码...........................50
9.1上机实验的问题和要求(需求分析):
..................................50
9.2程序设计的基本思想,原理和算法描述:
..............................50
9.3调试和运行程序过程中产生的问题及采取的措施:
.......................50
9.4运行输出结果:
.....................................................50
9.5源程序及注释:
....................................................50
实验十图…………………………….............................53
10.1上机实验的问题和要求(需求分析):
.................................53
10.2程序设计的基本思想,原理和算法描述:
.............................53
10.3调试和运行程序过程中产生的问题及采取的措施:
......................53
10.4运行输出结果:
....................................................53
10.5源程序及注释:
...................................................53
实验一学生成绩分析程序
一、上机实验的问题和要求(需求分析):
【题目】设一个班有10个学生,每个学生有学号,以及数学、物理、英语、语文、体育5门课的成绩信息。
分别编写3个函数以实现以下3个要求:
(1)求数学的平均成绩。
(2)对于有两门以上课程不及格的学生,输出他们的学号、各门课成绩及平均成绩。
(3)输出成绩优良的学生(平均成绩在85分以上或全部成绩都在80分以上)的学号、各门课成绩和平均成绩。
二、程序设计的基本思想,原理和算法描述:
【算法描述】
(1)用数组id[3],name[10],score[5]来记录是个学生的各门课程的成绩.将数学科目的成绩相加再求出平均成绩。
(2)取一个未知数A来求学生的不及格数,a>=2时输出学生的名字学号和成绩。
(3)求出所有的成绩的平均分并输出各门成绩和平均成绩。
三、调试和运行程序过程中产生的问题及采取的措施:
基本上是输入时的细节如大括号的位置等。
四、运行输出结果
五、源程序及注释:
输入学生的学号姓名和成绩:
#include"stdio.h"
structSTUDENT
{
charid[3];
charname[10];
intscore[5];
doubleave;
}stu[10];
voidmain()
{
intnum=10,i,j,all=0;;
for(i=0;i{
printf("\t请输入第%d学生的数据:
",i+1);
printf("\t学号:
");
scanf("%S",stu[i].id);
printf("\t姓名:
");
scanf("%s",stu[i].name);
j=0;
printf("\t语文课的成绩");
scanf("%d",&stu[i].score[j]);
j++;
printf("\t数学课的成绩");
scanf("%d",&stu[i].score[j]);
j++;
printf("\t物理课的成绩");
scanf("%d",&stu[i].score[j]);
j++;
printf("\t英语课的成绩");
scanf("%d",&stu[i].score[j]);
j++;
printf("\t体育课的成绩");
scanf("%d",&stu[i].score[j]);
}
pj();
bjg();
yx();
}
输出数学平均成绩:
voidpj(stu[10])
{
inta,b,i;
for(i=0;i<10;i++);
{
a=a+stu[i].score[2];
}
b=a/10;
printf("\ttheeveragescoreis:
%d",b);
}
求出不及格人数:
voidbjg()
{
inti,j=0,c=0;
for(i=0;i<10;i++);
{
for(j=0;j<5;i++);
{
if(stu[i].score[j]<60)
{c=c++;}
}
if("c>=2");
printf("两门课以上不及格的同学:
");
printf("%d\t%d\t%d\t%d\t",stu[i].id,stu[i].name,stu[i].score);
}
}
输出优秀学生:
voidyx()
{
inti,j=0,c=0;
for(i=0;i<10;i++);
{
for(j=0;j<5;i++);
{
if(stu[i].score[j]>=80)
{c=c++;}
}
if("c==5");
printf("优秀学生为:
");
printf("%d\t%d\t%d\t%d\t",stu[i].id,stu[i].name,stu[i].score);
}
}
实验二线性表的基本操作
一、上机实验的问题和要求(需求分析):
【题目】线性表的插入,删除。
二、程序设计的基本思想,原理和算法描述:
【算法描述】当我们要在顺序表的第i个位置上插入一个元素时,必须先将顺序表中第i个元素之后的所有元素依次后移一个位置,以便腾空一个位置,再把新元素插入到该位置。
若是欲删除第i个元素时,也必须把第i个元素之后的所有元素前移一个位置。
三、调试和运行程序过程中产生的问题及采取的措施:
四、运行输出结果:
五、源程序及注释:
#include
typedefstructlinknode
{
chardata;
structlinknode*next;
}linnode;
linnode*head;
intn;
创建线性表:
voidCreatelist()
{
n=0;
linknode*p,*s;
charx;
intz=1;
head=newlinknode;
p=head;
printf("\n\t\t请逐个输入结点,以“X”为结素标记!
\n");
while(z)
{
printf("\t\t输入一个字符数据,并按回车:
");
scanf("%c",&x);
getchar();
if(x!
='x')
{
s=newlinknode;
n++;
s->data=x;
p->next=s;
s->next=NULL;
p=s;
}
elsez=0;
}
}
线性表的插入:
voidInsList(inti,charx)
{
linknode*s,*p;
p=head;
intj=0;
while(p!
=NULL&&j
{
j++;
p=p->next;
}
if(p!
=NULL)
{
s=newlinknode;
s->data=x;
s->next=p->next;
p->next=s;
n++;
}
else
printf("\n\t\t线性表为空或插入位置超出!
\n");
}
线性表的删除:
voidDelList(charx)
{
linknode*p,*q;
if(head->next==NULL)
{
printf("\n\t\t线性表下溢!
");
return;
}
if(head->next==NULL)
{
printf("\n\t\t线性表已经为空!
");
return;
}
q=head;
p=head->next;
while(p!
=NULL&&p->data!
=x)
{
q=p;
p=p->next;
}
if(p!
=NULL)
{
q->next=p->next;
deletep;
n--;
printf("\n\t\t结点已经被删除!
");
scanf("\n\t抱歉!
没有找到您要删除的节点.");
}
}
实验三链表的基本操作
一、上机实验的问题和要求(需求分析):
【题目】建立线性链表,链表的插入、删除,查找。
二、程序设计的基本思想,原理和算法描述:
【算法描述】线性链表不需要用地址连续的存储空间来实现,链式存储的线性表对于插入、删除操作不再需要移动数据元素。
三、调试和运行程序过程中产生的问题及采取的措施:
四、运行输出结果:
五、源程序及注释:
建立线性链表:
#include
typedefstructlinknode
{
chardata;
structlinknode*next;
}linnode;
linnode*head;
intn;
voidCreateList()
{
n=0;
linnode*p,*s;
charx;
intz=1;
head=newlinnode;
p=head;
printf("\n\t\t建立一个线性表");
printf("\n\t\t说明:
请逐个输入字符,结素标记为"x"!
\n");
while(z)
{
printf("\t\tputin:
");
scanf("%c",&x);
getchar();
if(x!
='x')
{
s=newnode;
n++;
s->data=x;
s->next=s;
}
elsez=0;
}
}
链表的插入:
voidInsList(inti,charx)
{
linnode*s,*p;
p=head;
intj=0;
while(p!
=NULL&&j
{
j++;
p=p->next;
}
if(p!
=NULL)
{
s=newlinnode;
s->data=x;
s->next=p->next;
p->next=s;
n++;
}
else
printf("\n\t\t线性表为空或插入位置出错!
\n");
}
链表的删除:
voidDelList(charx)
{
node*p,*q;
if(head==NULL)
{
printf("\t\t链表下溢!
\n");
return;
}
if(head->next==NULL)
{
printf("\t\t线性表已经为空!
");
return;
}
q=head;
p=head->next;
while(p!
=NULL&&p->data!
=x)
{
q=p;
p=p->next;
}
if(p!
=NULL)
{
q->next=p->next;
deletep;
n--;
printf("\t\t已经被删除!
\n");
}
else
printf("\t\t未找到!
\n");
}
链表的查找:
实验四单链表综合实验
一、上机实验的问题和要求(需求分析):
【题目】
(1)、建立自己的有关单链表的头文件
(2)、单链表基本操作的实现
[问题描述]要在带头结点的单链表h中第i个数据元素之前插入一个数据元素x,首先需要在单链表中寻找到第i-1个结点并用指针p指示,然后申请一个由指针s指示的结点空间,并置x为其数据域值,最后修改第i-1个结点,并使x结点的指针指向第i个结点,要在带头结点的单链表h中删除第i个结点,首先要计数寻找到第i个结点并使指针p指向其前驱第i-1个结点,然后删除第i个结点并释放被删除结点空间。
二、程序设计的基本思想,原理和算法描述:
【算法描述】链式存储结构不是随机存储结构,即不能直接取到单链表中某个结点,而要从单链表的头结点开始一个一个地计数寻找。
三、调试和运行程序过程中产生的问题及采取的措施:
四、运行输出结果:
五、源程序及注释:
#include
#include
typedefcharDataType;
建立数组:
typedefstructnode
{
DataTypedata;
structnode*next;
}ListNode;
产生头结点:
voidInit_List(ListNode**L)
{
(*L)=(ListNode*)malloc(sizeof(ListNode));
(*L)->next=NULL;
}
测量单链表长度:
intList_Length(ListNode*L)
{
intn=0;
ListNode*p=L->next;
while(p!
=NULL)
{
n++;
p=p->next;
}
returnn;
}
单链表的查找第i个节点:
ListNode*GetNode(ListNode*L,inti)
{
intj;
ListNode*p;
p=L;j=0;/*从头结点开始扫描*/
while(p->next&&j!
=i)/*顺指针向后扫描,直到p->next为NULL或i=j为止*/
{
p=p->next;
j++;
}
if(i==j)
returnp;/*找到了第i个结点*/
else
returnNULL;/*当i<0或i>j时,找不到第i个结点*/
}
单链表在第i个节点插入:
voidInsertList(ListNode*L,DataTypex,inti)
{
ListNode*p,*s;
p=GetNode(L,i-1);/*寻找第i-1个结点*/
if(p==NULL)/*i<1或i>n+1时插入位置i有错*/
{
printf("error!
");
return;
}
s=(ListNode*)malloc(sizeof(ListNode));/*建立一个新的节点*/
s->data=x;s->next=p->next;p->next=s;/*将节点插入单链表*/
}
删除单链表第i个节点:
voidDeleteList(ListNode*L,inti)
{
ListNode*p,*r;
p=GetNode(L,i-1);/*找到第i-1个结点*/
if(p==NULL||p->next==NULL)
{
printf("error!
");
return;
}
r=p->next;/*使r指向被删除的结点a*/
p->next=r->next;/*将ai从链上删除*/
free(r);
}
使用头插法建立带头结点链表算法:
ListNode*CreatListF(void)
{
charch;
ListNode*head=(ListNode*)malloc(sizeof(ListNode));/*生成头结点*/
ListNod