数据结构课程设计个人报告.docx
《数据结构课程设计个人报告.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计个人报告.docx(40页珍藏版)》请在冰豆网上搜索。
数据结构课程设计个人报告
数据结构课程设计
----个人设计报告
1课程设计目的...................................................................................2
2课程设计内容和要求.........................................................................2
3任务完成情况....................................................................................2
4设计报告..........................................................................................3
4.1顺序表的应用..............................................................................3
4.1.1设计目的........................................................................................................................3
4.1.2设计内容及要求..................................................................................................................3
4.1.3需求分析........................................................................................................................3
4.1.4概要设计........................................................................................................................4
4.1.5详细代码........................................................................................................................4
4.1.6使用说明........................................................................................................................4
4.1.7测试结果与分析..................................................................................................................5
4.1.8参考文献.........................................................................................................................7
4.2链表的应用……………….................................................................8
4.2.1设计目的..........................................................................................................................8
4.2.2设计内容及要求..................................................................................................................8
4.2.3概要设计..........................................................................................................................9
4.2.4需求分析............................................................................................................................9
4.2.5详细代码..........................................................................................................................9
4.2.6使用说明.........................................................................................................................10
4.2.7测试结果与分析...................................................................................................................11
4.2.8参考文献……………………………………….............................................................12
4.3选做题…………………....................................................................12
4.3.1设计目的.........................................................................................................................12
4.3.2设计内容及要求...................................................................................................................13
4.3.3需求分析..........................................................................................................................13
4.3.5详细代码..........................................................................................................................13
4.3.6使用说明..........................................................................................................................13
4.3.7测试结果与分析....................................................................................................................13
4.3.8参考文献..........................................................................................................................14
5体会与感想..........................................................................................................................14
附录:
..........................................................................................................................................14
附件一顺序表的运用代码..........................................................................................................14
附件二链表的运用代码..............................................................................................................22
附件三选做题代码......................................................................................................................31
1课程设计目的
1、学习获取知识的方法;
2、提高发现问题、分析问题和解决实际问题的能力;
3、加强创新意识和创新精神;
4、加强团队的分工与合作;
5、掌握面向实际背景思考问题的方法。
2课程设计内容和要求
内容:
前言
第一章顺序表与链表
第二章栈和队列
第三章树和二叉树
要求:
(1)完成线性结构的设计任务,其中选做题不是必须完成的任务
(2)每人必须在完成个人任务的基础上提交个人任务的设计报告,内容包括:
任务名称、目的、具体内容、需求分析、概要设计、主要代码分析、测试结果、收获与体会。
3任务完成情况
任务完成情况介绍,如表3-1.(仅供参考,请根据实际完成情况填写)
表3-1任务完成情况表
完成任务名称
顺序表的应用
链表的应用
选做题
4设计报告
4.1顺序表的应用
4.1.1设计目的
熟悉线性表的应用,包括线性表的存储结构;向线性表中删除,插入元素;栈的操作,进栈,出栈;队列的操作,循环队列的操作。
增加动手、编程能力。
4.1.2设计内容及要求
(1)已知长度为n的线性表A采用顺序存储结构,请写一时间复杂度为0(n)、空间复杂度为0
(1)的算法,该算法删除线性表中所有值为item的数据元素。
要求:
线性表元素个数n很大,而值为item的数据元素个数很少,要求移动元素个数尽量少;删除后的数组元素与原数组元素不必保持顺序一致。
(2)编写一个函数将一个顺序表A(有n个元素,且任何元素均不为0)分拆成两个顺序表,使A中大于0的元素存放在B中,小于0的元素存放在C中。
(3)假设一个算术表达式中包含圆括号,方括号和花号三种类型的括号,编写一个判别表达式中括号是否正确配对的函数correct(exp,tag);其中:
exp为字符串类型量,表示被判别的表达式,tag为布尔型的变量。
(4)编写向顺序分配的循环队列QU[0,m-1]中插入一个结点的函数enqueue和从该队列中取出一个节点的dequeue函数。
(5)编写一个主函数,调试上述算法。
4.1.3需求分析
(1)删除所有值为item的数据元素,要使时间复杂度为0(n)、空间复杂度为0
(1)。
(2)对顺序表A输入元素,根据元素的正负对其分组。
(3)使用一个栈st进行判定,将‘(’,‘[’,‘{’入栈,当遇到‘)’,‘]’‘}’时,检查当时栈顶元素是否是对应的‘(’,‘[’,‘{’,若是则退栈,否则返回表示不配对。
当整个算术表达式检查完毕时栈为空,表示括号正确的配对;否则不配对。
(4)在循环队列中,队尾插入结点,并在该队列中取出一个结点
(5)建立工程实现上述函数
4.1.4概要设计
4.1.5详细代码
见附录一。
4.1.6使用说明
建立工程,按线性表运用系统提示进行操作。
4.1.7测试结果与分析
选择1,调试第一个函数。
输入7个数,1,,2,3,4,5,3,7。
选择删除3,程序运行后输出1,2,7,4,5结果正确。
且在程序中采用头尾两个指针(i=1,j=n),从两端向中间移动,凡遇到值item的数据元素时,直接将右端元素左移至值为item的数据元素位置。
保证了程序的效率。
选择2,调试第2个函数。
按照正负,拆分线性表。
输入6个数,1,2,3,-1,-2,-3。
运行后a中存放1,2,3;b中存放-1,-2,-3。
结果正确。
选择3,进行符号配对函数调试。
输入字符表达式:
{[a+[(b-c)]/d];经过运行,结果为:
Match!
,配对。
在设计算法时,使用一个栈st进行判定,将‘(’,‘[’,‘{’入栈,当遇到‘)’,‘]’‘}’时,检查当时栈顶元素是否是对应的‘(’,‘[’,‘{’,若是则退栈,否则返回表示不配对。
当整个算术表达式检查完毕时栈为空,表示括号正确的配对;否则不配对。
选择4,进行第4个函数调试。
选择队列个数:
5;输入队列元素:
1,2,,3,4,5选择y,进入操作,进行入队。
输入要插入的数字:
6。
入队只能在队尾进行插入,插入后的结果为:
1,2,3,4,5,6。
再进行出队操作。
出队只能在对首进行删除,删除1。
删除后的队列为:
2,3,4,5.结果正确。
4.1.8参考文献
[1]严蔚敏等著,数据结构(C语言版),清华大学出版社
4.2链表的应用
4.2.1设计目的
熟悉链表的运用,对单链表,循环链表,进行插入、删除操作。
4.2.2设计内容
(1)假设有两个按元素值递增次序排列的线性表A和B,均以单链表形式存储,里面的大部分元素对应相等,请删除一些元素(A中有而B中没有,或B中有而A中没有),使得两个有序表中保留下来的元素对应相等。
比如,A中元素为(1,3,5,8,10,13,18),B中元素为(1,3,6,8,9,10,13,15),则删除元素后A、B里的元素为(1,3,8,10,13)。
(2)猴子选大王。
n只猴子围成一圈,从1到m报数,报m的猴子出局。
余下的猴子从第m+1只开始继续从1到m报数,报m的猴子出局。
第n只猴子报数后,第1只猴子接着报数(因为围成了圈)。
待整个圈只剩下一只猴子时,该猴子即为大王。
n和m由用户输入,请输出当选大王的猴子的编号。
(3)设有一头指针为L的带有表头结点的非循环双向链表,其每个结点中除有prev(前驱指针),data(数据)和next(后继指针)域外,还有一个访问频度域freq。
在链表被起用前,其值均初始化为零。
每当在链表中进行一次Locate(L,x)运算时,令元素值为x的结点中freq域的值增1,并使此链表中结点保持按访问频度非增(递减)的顺序排列,同时最近访问的结点排在频度相同的结点的最后,以便使频繁访问的结点总是靠近表头。
试编写符合上述要求的Locate(L,x)运算的算法,该运算为函数过程,返回找到结点的地址,类型为指针型。
(4)在主函数中设计一个简单的菜单,分别调试上述算法。
4.2.3概要设计
4.2.4需求分析
(1)将链表A和链表B中互不相等的数删除。
(2)用链表实现约瑟夫循环。
(3)对双向非循环链表进行排序。
4.2.5详细代码
详见附录二。
4.2.6使用说明
运行工程后,出现链表的运用菜单。
如下图所示:
菜单共有四个选项,选择不同的选项会出现相应的提示进行下一步操作:
选择1:
第一小题;
选择2:
第二小题;
选择3:
第三小题。
选择0:
退出;
4.2.7测试结果与分析
选择1,调试第一个函数:
输入A链表:
1,3,5,8,10,,13,18;B链表:
1,3,6,8,9,10,13,15。
经过程序运行后输出A,B的内容为:
1,3,8,10,13。
本程序对A链表进行遍历操作,和B比较,删除A中有而B中没有的元素,得到最A中的元素。
同样对B进行操作,和删除后的A比较,删除多余的元素,即可得最后B中的元素。
选择2,调试第2个函数,输入猴子数目30,再输入报数数目3,经过运行,得出最后的王为16号。
选择3,对函数3进行调式。
输入5个数据:
1,2,3,5,7。
首先访问:
2,根据排序规律,访问后的顺序为:
2,1,,3,5,7;再访问:
5,排序为:
2,5,1,,7。
这是因为:
最近访问的结点排在频度相同的结点的最后。
然后再次访问5,得到:
5,2,1,3,7。
可见程序运行正确。
4.2.8参考文献
[1]严蔚敏等著,数据结构(C语言版),清华大学出版社
4.3链表选作题
4.3.1设计目的
评优标准
4.3.2设计内容及要求
内容:
已知两个单链表A和B分别表示两个集合,其元素递增排列,编写一个函数求出A和B的交集C,要求C同样以元素值递增的单链表形式存储。
4.3.3需求分析
建立两个单链表A,B,将其元素递增排列后,再求出交集C
4.3.5详细代码
详见附录三。
4.3.6使用说明
将A,B的元素分别输入进去,以0结束。
4.3.7测试结果与分析
输入A:
3,10,18,13,5,1,8,0。
输入B:
15,10,6,8,3,1,9,13,0。
输出A和B的交集:
1,3,8,10,13。
设计算法时,交集指的是两个单链表的元素值相同的结点的集合,为了操作方便,先让单链表C带有一个头结点c,最后将其删除掉。
4.3.8参考文献
[1]严蔚敏等著,数据结构(C语言版),清华大学出版社
5体会与感想
(1)这次数据结构的课程设计,使我对线性表和链表的理解加深了很多,通过实验题目的具体运用,有了一个更加清楚的认识和理解。
对书上列出的函数算法,也能够更加深刻的理解它的意义。
(2)在做线性时,主要是用结构体对线形表接点表示;对链表排序时所要考虑到的指针指向,这些操作为什么要按照这个顺序。
考虑是头指针。
(3)这次课程设计,我体会到编程要分段,把问题细画,看到一个题目,要理清大致思路,线性表该如何操作,链表该如何操作。
画出流程图,可以使思路更加清晰。
特别是双向非循环指针,对它排序要执行很多步骤,每次指针要移动多次,运行出来都只知道排序出错。
只有细化,通过流程图。
(4)本次实验采取工程来调试各个函数,学会了建立工程。
对以后编写应用系统有一定帮助。
附录一:
顺序表运代码:
头文件:
head.h
#include
#include
#defineMAXSIZE100
#defineMAX_STACK100
#include
structList
{
intdata[MAXSIZE];
intlength;
};
structstStack
{
charszStack[MAX_STACK];
intnTop;
};
structQueue
{
intp[MAXSIZE];
intfront,rear;
};
voidprogram1_1();
voidprogram1_2();
voidprogram1_3();
voidprogram1_4();
}
Main()函数:
#include
#include
#include"head.h"
intmain()
{
intchoice;
do
{
printf("\n欢迎进入顺序表应用系统\n");
printf("\n-------------------主菜单---------------------\n");
printf("
(1)删除线性表中所有值为item的数据元素...\n");
printf("
(2)将一个顺序表以0为界点分拆成两个顺序表...\n");
printf("(3)一个判别表达式中括号是否正确配对...\n");
printf("(4)向队列插入一个结点和从该队列中取出一个结点...\n");
printf("(0)退出系统...\n");
printf("\n请选择:
");
scanf("%d",&choice);
if(choice<0&&choice>5)continue;
switch(choice)
{
case1:
program1_1();;break;
case2:
program1_2();break;
case3:
program1_3();break;
case4:
program1_4();break;
case0:
exit(0);
default:
break;
}
}while
(1);
return0;
}
program1_1();函数
#include
#include"head.h"
voidprogram1_1()
{
intitem,n,i=0;
printf("请输入一n的值:
\n");
scanf("%d",&n);
printf("请输入n个数:
\n");
int*p=newint[n];//动态开创数组p[n]
for(i=0;i{
scanf("%d",&p[i]);
}
printf("请输入要删除的数:
\n");
scanf("%d",&item);
for(i=0;i{
if(p[i]==item)
{
p[i]=p[n-1];
n--;
i--;
}
else
{
continue;
}
}
printf("删除后的结果:
为\n");
for(i=0;i{
printf("%d",p[i]);
printf("\n");
}
}
program1_2();函数
#include
#include
#include"head.h"
voidprogram1_2()
{