何星数据结构.docx
《何星数据结构.docx》由会员分享,可在线阅读,更多相关《何星数据结构.docx(18页珍藏版)》请在冰豆网上搜索。
何星数据结构
陕西省高等教育自学考试
数据结构课程
实践环节考核报告
准考证号:
010*********考生姓名:
何星
所学专业:
计算机网络专业层次:
本科
考核地点:
西安电子科技大学考核时间:
2012.5.19
实践考核评语及成绩评定(由指导教师填写)
教师签名:
日期:
主考院校:
西安电子科技大学
一:
实验目的
由于数据结构是计算机学科的一门技术基础课程,通过上机实践考核可以检测考生对课程掌握的程度,也可以帮助考生消化课程的内容,加深理解数据结构的基础概念,基本理论和基本方法。
在上机实践考核中,为培养考生良好的学习和工作作风,要求考生按照一定的的规格惊醒考核准备,熟悉上机环境,上机调试和正确运行程序,和产生正确的结果。
但准备阶段和整理实践报告也很重要,只有做好充分的准备,熟悉机器环境,尽可能的正确编码,才能高效率地利用机器时间,在书写报告时,要按照一定的规范进行,为学生将来参加软件开发和研制工作,打下一个良好的基础。
二:
实验环境
1.硬件环境:
Pentium(R)Dual-CoreCPUE65002.93GHz
2G内存300G硬盘
2.软件环境:
MicrosoftWindowsXPProfessionalServicePack3
VC++6.0
三:
试验内容
单元2:
栈与队列结构上的基础算法描述及实现。
#include"stdio.h"
#include"stdlib.h"
#definenull0
structstacknode
{chardata;
structstacknode*next;
}node;
voidenstack(structstacknode*q,charx);
intstackempty(structstacknode*q);
chardestack(structstacknode*q);
voiddisplay(structstacknode*q);
main()
{charx,ch;
inti;
structstacknode*top,*s,*q;
printf("现在开始建立链栈....请输入字符:
\n");
top=(structstacknode*)malloc(sizeof(structstacknode));
top=null;
q=top;
x=getchar();
while(x!
='\n')
{s=(structstacknode*)malloc(sizeof(structstacknode));
s->next=top;
s->data=x;
top=s;
x=getchar();
}
q=top;
printf("建立后的链栈为:
");
display(q);
printf("**********链栈基本算法实现**********\n");
printf("*1.加入2.删除*\n");
printf("*3.查看4.显示*\n");
printf("*其它:
退出*\n");
printf("****************************\n");
printf("\n");
printf("请输入您想做的操作的序号:
");
scanf("%d",&i);
switch(i)
{case1:
printf("请输入你要加入的字符:
\n");
scanf("%s",&ch);
enstack(q,ch);
printf("此时的链栈为:
");
display(q);
printf("\t谢谢使用!
\n");
break;
case2:
if(stackempty(q))
printf("栈空,不能删除!
");
else
printf("删除的元素为:
%c\n",destack(q));
printf("删除后的栈为:
");
display(q->next);
printf("此时的链栈为:
");
display(q);
printf("\t谢谢使用!
\n");
break;
case3:
if(stackempty(q))
printf("栈空,没有元素!
");
else
printf("查看后栈顶元素为:
%c",q->data);
printf("此时的链栈为:
");
display(q);
printf("\t谢谢使用!
\n");
break;
case4:
printf("建好的队列显示为:
");
display(q);
printf("此时的链栈为:
");
display(q);
printf("\t谢谢使用!
\n");
break;
default:
printf("\t谢谢使用!
\n");
}
printf("\n");
}/*主程序结束*/
voidenstack(structstacknode*q,charx)/*加入过程*/
{structstacknode*p;
p=(structstacknode*)malloc(sizeof(structstacknode));
p->data=x;
p->next=q;
q=p;
printf("加入后链栈为:
");
display(q);
}
intstackempty(structstacknode*q)/*判栈空*/
{returnq==null;}
chardestack(structstacknode*q)/*删除函数*/
{
structstacknode*p;
p=q;
q=q->next;
returnp->data;
}
voiddisplay(structstacknode*q)/*显示过程*/
{structstacknode*p;
p=q;
if(stackempty(p))
printf("栈空,没元素!
");
else
{while(p)
{printf("%c",p->data);
p=p->next;}
}
}
单元4:
文件结构及排序、查找算法实现
#include
#include
#include
//文件的记录类型
structrecord{
intkey;//关键字
char*info;//其它信息
};
//设置的文件记录个数
#defineSIZE100
//---声明自定义函数------------------------------------------
voidinit(record*a1,record*a,constintn);//备份数据
voidswap(record*x,record*y);//交换函数
voidSetF(record*array,constintn);//建立文件
voidDisplayArray(constrecord*array,constintn,char*string);//显示
voidBubbleSort(record*array,constintn);//冒泡排序
voidSelectSort(record*array,constintn);//选择排序
voidInsertSort(record*array,constintn);//插入排序
voidQuickSort(record*array,intlow,inthigh);//快速排序
intBinarySearch(constrecord*array,intSearchkey,intlow,inthigh);//折半查找
intSeqS(constrecord*array,intSearchkey,intn);//顺序查找
//------主函数-----------------------------------------
voidmain(){
recorda1[SIZE],a[SIZE];//定义了两个与文件记录类型相同的数组
intkey,result;//key是查找的记录的关键字
intflag=1;//定义内层循环退出标志
intfunctionKey;//定义一个接收功能键
while
(1)
{cout<cout<<"==========程序功能========="<cout<<"1:
建立文件"<cout<<"2:
顺序查找"<cout<<"3:
简单排序"<cout<<"4:
快速排序"<cout<<"5:
折半查找"<cout<<"6:
文件显示"<cout<<"0:
退出程序"<cout<<"请选择功能键:
";
cin>>functionKey;//接收功能键
switch(functionKey)
{case1:
SetF(a1,SIZE);break;//调用建立文件函数
case2:
{cout<";
cin>>key;
result=SeqS(a1,key,SIZE);//调用顺序查找函数
if(result==-1)
cout<"<else
cout<"<}break;
case3:
{while(flag){
cout<cout<<"==========简单排序方法======================"<cout<<"1:
插入排序InsertSort(从小到大)"<cout<<"2:
冒泡排序BubbleSort(从小到大)"<cout<<"3:
选择排序SelectSort(从小到大)"<cout<<"0:
退出"<cout<<"请选择排序方法:
";
cin>>functionKey;
switch(functionKey)
{case1:
{//备份数据
init(a,a1,SIZE);
InsertSort(a,SIZE);//调用插入排序函数
};break;
case2:
{//备份数据
init(a,a1,SIZE);
BubbleSort(a,SIZE);//调用冒泡排序函数
};break;
case3:
{//备份数据
init(a,a1,SIZE);
SelectSort(a,SIZE);//调用选择排序函数
};break;
case0:
flag=0;
}}};break;
case4:
{//备份数据
init(a,a1,SIZE);
QuickSort(a1,0,SIZE-1);//调用快速排序函数
DisplayArray(a1,SIZE,"快速排序->");
};break;
case5:
{cout<";
cin>>key;
result=BinarySearch(a1,key,0,SIZE-1);//调用折半查找函数
if(result==-1)
cout<"<else
cout<"<};break;
case6:
DisplayArray(a1,SIZE,"文件显示->");break;//调用文件显示函数
case0:
exit(0);//退出
}
}
}
//----定义自定义函数------------------------------------------
//为了检验排序的正确性,而将原数据做一个备份
voidinit(record*a1,record*a,constintn){
inti;
for(i=0;ia1[i]=a[i];
}
//交换两个变量值的函数
voidswap(record*x,record*y){
recordtemp;//临时变量
temp=*x;
*x=*y;
*y=temp;
}
//利用随机数函数产生SIZE个在0到9999之间的随机整数
//作为文件中记录的关键字建立无序文件
voidSetF(record*array,constintn){
inti;
for(i=0;iarray[i].key=rand();//rand()函数是产生随机数用的
while(array[i].key>9999)
array[i].key=array[i].key-9999;
}
cout<<"文件建立好。
";
}
//显示文件记录关键字的函数
voidDisplayArray(constrecord*array,constintn,char*string){
inti;
cout<cout<cout.setf(ios:
:
left);
for(i=0;iif(((i+1)%5)==0)
cout<else
cout<cout<}
//冒泡排序(从小到大)
voidBubbleSort(record*array,constintn){//n是数组元素的个数
inti,j;
for(i=0;ifor(j=0;jif(array[j].key>array[j+1].key)
swap(&array[j],&array[j+1]);
DisplayArray(array,n,"BubbleSort-->");
}
//选择排序(从小到大)
voidSelectSort(record*array,constintn){//n是数组元素的个数
inti,j,min;
for(i=0;imin=i;
for(j=n-1;j>i;j--)
if(array[j].keymin=j;
swap(&array[min],&array[i]);
}
DisplayArray(array,n,"SelectSort-->");
}
//插入排序(从小到大)
voidInsertSort(record*array,constintn){//n是数组元素的个数
inti,j;
for(i=0;ifor(j=i;(j>0)&&(array[j].keyswap(&array[j],&array[j-1]);
DisplayArray(array,n,"InsertSort-->");
}
//快速排序
voidQuickSort(record*array,intlow,inthigh){
if(lowinti=low,j=high,m=(low+high)/2;
do{
while(array[i].keywhile(array[m].keyif(i<=j){
if(m==i)m=j;
elseif(m==j)m=i;
swap(&array[i],&array[j]);
i++;j--;}
}while(i<=j);
QuickSort(array,low,j);
QuickSort(array,i,high);
}}
//二分法(拆半查找法)查找函数
intBinarySearch(constrecord*array,intSearchkey,intlow,inthigh){
intmiddle;
while(low<=high){
middle=(low+high)/2;
if(Searchkey==array[middle].key)
return(middle);
elseif(Searchkeyhigh=middle-1;
else
low=middle+1;
}
return-1;
}
//顺序查找函数
intSeqS(constrecord*array,intSearchkey,intn){
inti;
for(i=0;i{
if(Searchkey==array[i].key)
return(i);
}
return-1;
}
实验心得
《数据结构》是一门实践性很强的计算机专业课程,通过上机实践不仅可以检测我对课程的掌握,还可以帮助我理解掌握和学会应用课本上的理论知识。
对于本门课程,我必须要认真学习理论知识,而且还要和与实践相结合才能学好这门课程。
通过本次上机考试,我收获很大,使自己掌握了C++的基本概念、基本原理、实用的开发方法和技术,培养了自己的学习兴趣和良好的工作作风,使我掌握如下基本内容:
1.加深理解了数据、数据元素、数据项、数据结构、堆栈和队列的基本概念和相互关系.
数据是信息的载体。
数据元素是数据的基本单位。
数据元素是由若干个数据项组成的。
数据结构是数据之间的相互关系,及数据的组成形式。
堆栈是限制仅在表的一端进行插入和删除运算的线性表。
队列允许在表的一端进行插入,另一端进行删除。
2.了解数据结构就是计算机存储组织数据的方式;是指相互之间存在一种或多种特定关系的数据元素的集合。
通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。
数据结构往往同高效的检索算法和索引技术有关。
了解到采用树的存储结构和图的存储结构的基本概念和方法。
了解到树是由若该有限数据集组成。
并且有且只有一个特定根节点。
其余互不相交的节点称为根的子树。
图是由两个数据集合组成,可分为有向图和无向图。
采用树和图的存储结构可以大大提高数据的检索能力。
3.掌握了数据检索的方式和算法。
可以采用对数据排序的方法提高对数据的检索,也选择顺序查找、二分查找和分块查找以及文件建立索引的方法。
提高对数据的检索。
从而方便查询,提高工作效率。
通过这次上机考试使我发现了理论和实践结合的重要性,也使我更好的理解了数据结构这门课程的内涵,其中的讲到的逻辑性和数据存储和检索方式、方法使我深受启发,对我从事相关工作带来了极大的帮助,使我更好更深刻的了解到这门学科的严谨性和重要性。
通过这次上机考试,我深刻认识到自己的不足,争取以后在进一步学习理论的同时多多和实践结合,加强练习,加深掌握和理解这门学科的所讲的内容,以便能提高自己的工作能力和工作效率。