数据结构实验五.docx
《数据结构实验五.docx》由会员分享,可在线阅读,更多相关《数据结构实验五.docx(9页珍藏版)》请在冰豆网上搜索。
数据结构实验五
《数据结构》实验报告
实验题目:
实验五、查找排序
姓名:
学号:
142054301班级:
1420543
系名:
计算机工程系专业:
计算机科学与技术指导老师:
实验时间:
2016年6月14日实验地点:
专业软件实验室
【实验概述】
1.实验目的及要求
目的:
1.掌握哈希表的定义,哈希函数的构造方法。
2.掌握并比较各种排序算法。
要求:
预习并掌握查找的概念、静态查找与动态查找、顺序查找、二分查找、索引查找、二叉排序树的概念、平衡二叉树、哈希查找、直接插入排序、快速排序、冒泡排序、简单选择排序等算法思想。
2.实验原理
1、树的逻辑结构特点:
树(tree)是n(n≥0)个结点的有限集T,其中:
(1)有且仅有一个特定的结点,称为树的根(root);
(2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1,T2,……Tm,其中每一个集合本身又是一棵树,称为根的子树(subtree)。
2、树结构中的基本术语,以及树的树形结构表示。
3、二叉树的逻辑结构特点:
1、查找和排序是日常数据处理过程中经常要进行的操作和运算。
2、查找是根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素或(记录)。
若查找表中存在这样一个记录,则称“查找成功”,查找结果:
给出整个记录的信息,或指示该记录在查找表中的位置;否则称“查找不成功”,查找结果:
给出“空记录”或“空指针”。
3、静态查找与动态查找的区别。
平均查找长度。
4、查找算法有:
静态查找中常见的查找算法:
顺序查找、二分查找、索引查找。
动态查找中常见的算法有二叉排序树和平衡二叉树上的查找。
平均查找长度为0的哈希查找。
5、排序是是将一组“无序”的记录序列调整为“有序”的记录序列。
6、排序算法的优劣从空间复杂度、时间复杂度、稳定性三个角度分析。
7、常见的排序算法可分为:
插入类、交换类、选择类、归并排序、基数排序等。
3.实验环境(使用的软件)
VC++6.0
【实验内容】
1.实验算法设计
设计一个学生信息管理系统,学生对象至少要包含:
学号、姓名、成绩等信息。
要求实现以下功能:
1、查找:
分别给定学生学号、姓名,能够查找到学生的基本信息(要求至少实现改进后的顺序查找算法);
2、排序:
分别按学生的学号、成绩进行排序(要求至少用实现直接插入排序、冒泡排序、简单选择排序算法)。
2.实验过程(源代码及描述、调试过程及分析)
#include
#include
usingnamespacestd;
structstudent
{
intnum;//学号
charname[20];//姓名
charbanji[20];//班级
intc;//C语言课程成绩
intdatastruct;//数据结构课程成绩
};
structqueue
{
structstudenta[8];
intlenth;
};
classlist
{
private:
queued;
public:
intseqsearch(list,char*);
intbinsearch(list,int,int,int);
voidinsertsort(list);
voidselectsort(list);
voidbubblesort(list);
list();
voiddisplay(list);
voidshow(int);
};
list:
:
list()
{
structstudente[8]={
{1,"王丽","03511",85,76},
{2,"张秋","03511",78,77},
{3,"刘丽","03511",90,79},
{4,"王童","03511",75,86},
{5,"赵阳","03511",60,71},
{6,"李艳","03511",58,68},
{7,"钱娜","03511",95,89},
{8,"孙胜","03511",45,60},
};
for(inti=0;i<8;i++)
d.a[i]=e[i];
}
voidlist:
:
show(inti)
{
if(i==-1)
cout<<"sorrynotfound!
!
"<else
{
cout<<"学号"<<"班级"<<"c++"<<"数据结构\n";
cout<<""<cout<cout<cout<cout<}
}
voidlist:
:
display(listl)
{
cout<<"学号"<<"班级"<<"c++"<<"数据结构\n";
for(inti=0;i<8;i++)
{
cout<<""<cout<cout<cout<cout<}
}
intlist:
:
seqsearch(listl,charname[20])//顺序查找
{
for(inti=0;i<8;i++)
if(strcmp(l.d.a[i].name,name)==0)
returni;
return-1;
}
voidlist:
:
insertsort(listl)//直接插入排序
{
structstudentn;
for(inti=1;i<8;i++)
{
n=l.d.a[i];
intj=i-1;
while(j>=0&&strcmp(n.name,l.d.a[j].name)<0)
{
l.d.a[j+1]=l.d.a[j];
j--;
}
l.d.a[j+1]=n;
}
display(l);
}
voidlist:
:
selectsort(listl)//简单选择排序
{
for(inti=0;i<7;i++)
{
intj=i;
for(intk=j;k<8;k++)
{
if(l.d.a[j].cj=k+1;
}
if(j!
=i)
{
students=l.d.a[i];
l.d.a[i]=l.d.a[j];
l.d.a[j]=s;
}
}
display(l);
}
voidlist:
:
bubblesort(listl)//冒泡排序
{
for(inti=7;i>0;i--)
for(intj=0;j
{
if(l.d.a[j].datastruct>l.d.a[j+1].datastruct)
{
studentd=l.d.a[j];
l.d.a[j]=l.d.a[i+1];
l.d.a[j+1]=d;
}
}
display(l);
}
voidmain()
{
listl;
cout<<"顺序查找姓名为赵阳的学生\n";
inti=l.seqsearch(l,"赵阳");
l.show(i);
cout<cout<<"直接插入排序对姓名进行排序\n";
cout<<"排序前的结果:
\n";
l.display(l);
cout<<"排序后的结果:
\n";
l.insertsort(l);
cout<cout<<"简单选择排序对c语言成绩进行排序\n";
cout<<"排序前的结果:
\n";
l.display(l);
cout<<"排序后的结果:
\n";
l.selectsort(l);
cout<cout<<"冒泡排序对数据结构成绩进行排序\n";
cout<<"排序前的结果:
\n";
l.display(l);
cout<<"排序后的结果:
\n";
l.bubblesort(l);
cout<}
3.结果与结论(实验结果截图、结论总结)
通过该实验,我掌握了查找的概念、静态查找与动态查找、顺序查找、二分查找、索引查找、二叉排序树的概念、平衡二叉树、哈希查找、直接插入排序、快速排序、冒泡排序、简单选择排序等算法思想。