数据结构实训报告.docx

上传人:b****3 文档编号:2448393 上传时间:2022-10-29 格式:DOCX 页数:19 大小:163.81KB
下载 相关 举报
数据结构实训报告.docx_第1页
第1页 / 共19页
数据结构实训报告.docx_第2页
第2页 / 共19页
数据结构实训报告.docx_第3页
第3页 / 共19页
数据结构实训报告.docx_第4页
第4页 / 共19页
数据结构实训报告.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

数据结构实训报告.docx

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

数据结构实训报告.docx

数据结构实训报告

 

实训项目:

数据结构课程实习

计算机科学与技术专业10级01班

姓   名:

王晓勃

实训成绩:

指导老师:

孟晓丽、贺军鹏

2012年5月21日

 实训目的:

通过具体的课程实习,熟悉数据结构中顺序表、单链表、栈、树、串和排序等数据结构及其上的各种操作和实际应用。

在设计的过程中,掌握数据结构的思想,并运用于具体问题的解决之中。

加深对数据结构课程中理论和实践相结合的认识。

使学生在初学阶段执行严格的实习步骤规范(包括上机操作规范),上机课时利用率会大大提高,有助于养成良好的程序编制风格,培养严谨、科学、高效的工作方式。

实训任务及要求:

 1、猴子吃桃子问题

任务:

猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个;第二天早上又将剩下的桃子吃掉了一半,又多吃了一个;以后每天早上都吃了前一天剩下的一半加一个,到第n天早上想再吃时,发现只剩下一个桃子了。

要求:

从键盘输入猴子吃桃的天数day。

输出形式:

输出第一天共摘桃子的个数。

测试数据:

day=6。

2、顺序表的插入

任务:

从键盘输入任一整数,使其插入到有序的数列:

{15,42,86,118,235,289,324,390,500,1000}中,插入后仍然保持从小到大的顺序。

要求:

从键盘输入插入的数据x。

输出形式:

输出原序列和插入新数后的序列。

测试数据:

x=665。

3、货物入库和出库

任务:

某超市要将货物进行入库操作,模拟其入库和出库的操作。

要求:

从键盘输入所要入库货物的总数n、入库的货物号码。

输出形式:

输出入库的货物号码序列和出库的货物序列。

测试数据:

n=8,入库序列为:

2,3,6,18,22,25,29,30。

实训仪器、仪表与工具、器材:

硬件设备为多媒体计算机、实验运行环境及软件为turboc或MicroSoftvisualC++6.0及Windows2000操作系统、程序设计语言为C语言。

  

实训内容、方法与步骤(流程):

实训内容:

 1、猴子吃桃子问题

猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个;第二天早上又将剩下的桃子吃掉了一半,又多吃了一个;以后每天早上都吃了前一天剩下的一半加一个,到第n天早上想再吃时,发现只剩下一个桃子了。

2、顺序表的插入

从键盘输入任一整数,使其插入到有序的数列:

{15,42,86,118,235,289,324,390,500,1000}中,插入后仍然保持从小到大的顺序。

3、货物入库和出库

某超市要将货物进行入库操作,模拟其入库和出库的操作。

要求:

从键盘输入所要入库货物的总数n、入库的货物号码。

输出形式:

输出入库的货物号码序列和出库的货物序列。

4、约瑟夫环编号是1,2,•••,n的n个人按照顺时针方向围坐一圈,每个人只有一个密码(正整数)。

一开始任选一个正整数作为报数上限值m,从第一个人开始顺时针方向自1开始顺序报数,报到m时停止报数。

报m的人出列,将他的密码作为新的m值,从他的顺时针方向的下一个开始重新从1报数,依次下去,直到所有的人全部出列或者剩余一个人为止。

设计一个程序来求出所有出列顺序或最后一个赢家。

利用单向循环链表存储结构模拟此过程,并从键盘输入人数n以及m的初值,并输入每个人的密码和姓名,建立单循环链表。

输出形式:

正确的输出序列或最后一个赢家。

5、排序

  对从键盘输入的任意多个数n进行从小到大的排序。

  要求:

从键盘输入要求排序的数的个数n以及要排序的数,分别利用起泡法和快速排序法来实现。

输出:

排序后的数,每行输出五个数。

实训方法与步骤:

1、猴子吃桃子问题

#include

#include

intmain()

{

printf("请输入猴子吃桃的天数n:

按回车键结束\n");

intx=1,y,n,i;

scanf("%d",&n);

for(i=n;i>0;i--)

{

x=x*2;

y=3*x-2;

}

printf("第一天猴子一共摘得桃子:

%d\n",y);

2、顺序表的插入

#include

intmain()

{

inta[50]={15,42,86,118,235,289,324,390,500,1000};

intx,i;

for(i=0;i<10;i++)

{

printf("%d",a[i]);

}

printf("\n请输入要插入的数:

");

scanf("%d",&x);

for(i=9;i>=0;i--)

{

if(x

{

a[i+1]=a[i];

a[i]=x;

}

}

printf("插入后的数列为:

\n");

for(i=0;i<11;i++)

{

printf("%d",a[i]);

}

printf("\n");

3、货物入库和出库

#include

#include

#include

#defineoverflow-2

#defineok1

#defineerror0

#defineSTACK_INIT_SIZE100

#defineSTACKINCREMENT10

#defineselemtypeint

typedefintStatus;

typedefstruct{

int*base;

int*top;

intstacksize;

}sqstack;

StatusInitstack(sqstack*s)

{

s->base=(int*)malloc(STACK_INIT_SIZE*sizeof(int));

if(!

s->base)exit(overflow);

s->top=s->base;

s->stacksize=STACK_INIT_SIZE;

returnok;

}

Statuspush(sqstack*s,selemtypee)

{

if(s->top-s->base>=s->stacksize)

{

s->base=(int*)realloc(s->base,(s->stacksize+STACKINCREMENT)*sizeof(int));

if(!

s->base)exit(overflow);

s->top=s->base+s->stacksize;

s->stacksize+=STACKINCREMENT;

}

*s->top++=e;

returnok;

}

Statuspop(sqstack*s,int*e)

{

if(s->top==s->base)

{

printf("空栈\n");

returnerror;

}

else

{

*e=*--s->top;

printf("%d",*e);

returnok;

}

}

voidmain()

{

intm,n,i,j,n1,m1;

sqstacks1;

Initstack(&s1);

printf("******欢迎使用WXB货物出入库系统******");

printf("\n请输入所有入库货物数n:

");

scanf("%d",&n);

printf("请输入入库货物序列号:

");

for(i=0;i

{

scanf("%d",&n1);

push(&s1,n1);

}

printf("请输入出库货物总数m(m<=%d):

",n);

scanf("%d",&m);

if(m>=0&&m<=n)

{

printf("");

for(j=0;j

{

pop(&s1,&m1);

}

printf("\n");

}

else

{

printf("输出货物总数错误,请重新输入\n");

}

printf("****感谢您的使用,欢迎你下次使用!

****\n");

4、约瑟夫环

#include

#include

#include

#defineerror-1

typedefintstatus;

structstudent

{

intnum;

charname[20];

intmima;

}studata;//定义结构体来保存各个数据

typedefstructlnode{

structstudentdata;//嵌套structstudent结构体的data

structlnode*next;

}lnode,*linklist;//结点*linklist为structlnode型指针

voidcreatelist(linklist&l,intn)

{

inti,j,x;

linklisthead,p,q;

head=(linklist)malloc(sizeof(lnode));

p=head;//p指向头结点

for(i=0;i

{

printf("\n请输入序号为%d人的姓名和密码:

",i+1);

p->next=(linklist)malloc(sizeof(lnode));//p->next指向新生成的结点

p=p->next;//p指向新生成的结点

scanf("%s%d",&p->data.name,&p->data.mima);

p->data.num=(i+1);

p->next=head->next;//p->next指向头结点的next(也就是第一个结点)

}

printf("刚才输入对应序号姓名密码列表:

\n");

for(x=1;x<=6;x++)

{

p=p->next;

printf("%d\t%s\t%d\n",p->data.num,p->data.name,p->data.mima);

}

printf("请输入初始m值:

");

scanf("%d",&j);

if(j<1)

printf("输入错误!

请重新输入\n");

else

{

while(p->next!

=p)

{

intm=1;

for(m=1;m

{

p=p->next;

}

q=p->next;

p->next=q->next;

j=q->data.mima;

printf("第%d号%s输出\n",q->data.num,q->data.name);

free(q);

}

printf("最后赢家%d号是%s\n",p->data.num,p->data.name);

}

}

voidmain()

{

structstudent;

intn;

linklisthead;

printf("\n===》请输入人数n:

");

scanf("%d",&n);

createlist(head,n);

5、排序

#include

#include

#include

#defineove

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

当前位置:首页 > 解决方案 > 工作计划

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

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