数据结构完整题目及答案1.docx
- 文档编号:8836274
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:57
- 大小:203.13KB
数据结构完整题目及答案1.docx
《数据结构完整题目及答案1.docx》由会员分享,可在线阅读,更多相关《数据结构完整题目及答案1.docx(57页珍藏版)》请在冰豆网上搜索。
数据结构完整题目及答案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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 完整 题目 答案