何星数据结构.docx

上传人:b****7 文档编号:25112550 上传时间:2023-06-05 格式:DOCX 页数:18 大小:173.25KB
下载 相关 举报
何星数据结构.docx_第1页
第1页 / 共18页
何星数据结构.docx_第2页
第2页 / 共18页
何星数据结构.docx_第3页
第3页 / 共18页
何星数据结构.docx_第4页
第4页 / 共18页
何星数据结构.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

何星数据结构.docx

《何星数据结构.docx》由会员分享,可在线阅读,更多相关《何星数据结构.docx(18页珍藏版)》请在冰豆网上搜索。

何星数据结构.docx

何星数据结构

陕西省高等教育自学考试

数据结构课程

实践环节考核报告

 

准考证号:

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;i

a1[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;i

array[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;i

if(((i+1)%5)==0)

cout<

else

cout<

cout<

}

//冒泡排序(从小到大)

voidBubbleSort(record*array,constintn){//n是数组元素的个数

inti,j;

for(i=0;i

for(j=0;j

if(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;i

min=i;

for(j=n-1;j>i;j--)

if(array[j].key

min=j;

swap(&array[min],&array[i]);

}

DisplayArray(array,n,"SelectSort-->");

}

//插入排序(从小到大)

voidInsertSort(record*array,constintn){//n是数组元素的个数

inti,j;

for(i=0;i

for(j=i;(j>0)&&(array[j].key

swap(&array[j],&array[j-1]);

DisplayArray(array,n,"InsertSort-->");

}

//快速排序

voidQuickSort(record*array,intlow,inthigh){

if(low

inti=low,j=high,m=(low+high)/2;

do{

while(array[i].key

while(array[m].key

if(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(Searchkey

high=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.掌握了数据检索的方式和算法。

可以采用对数据排序的方法提高对数据的检索,也选择顺序查找、二分查找和分块查找以及文件建立索引的方法。

提高对数据的检索。

从而方便查询,提高工作效率。

通过这次上机考试使我发现了理论和实践结合的重要性,也使我更好的理解了数据结构这门课程的内涵,其中的讲到的逻辑性和数据存储和检索方式、方法使我深受启发,对我从事相关工作带来了极大的帮助,使我更好更深刻的了解到这门学科的严谨性和重要性。

通过这次上机考试,我深刻认识到自己的不足,争取以后在进一步学习理论的同时多多和实践结合,加强练习,加深掌握和理解这门学科的所讲的内容,以便能提高自己的工作能力和工作效率。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 演讲主持

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1