数据结构课程设计实验报告8212136.docx
- 文档编号:17162271
- 上传时间:2023-07-22
- 格式:DOCX
- 页数:20
- 大小:412.32KB
数据结构课程设计实验报告8212136.docx
《数据结构课程设计实验报告8212136.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计实验报告8212136.docx(20页珍藏版)》请在冰点文库上搜索。
数据结构课程设计实验报告8212136
(此文档为word格式,下载后您可任意编辑修改!
)
《数据结构与算法》
课程设计报告
姓名:
林小琼
学号:
班级:
09网络工程
设计时间:
2011.1.10—2011.1.14
审阅教师:
林仙丽
目录
一.课程设计的目的与要求(含设计指标)....................2
二.方案实现与调试........................................2
2.1仓库管理系统...........................................2
2.2通讯录管理系统.........................................5
2.3猴子选大王.............................................7
2.4.二叉树运算(最近祖先)..................................7
2.5各种排序..............................................8
三.课程设计分析与总结.......................................9
四.源程序清单.....................................................9
一.课程设计的目的与要求(含设计指标)
设计目的:
1、培养学生运用算法与数据结构的基本知识解决实际编程中的数据结构设计和算法设计问题;2、培养学生独立设计程序与解决问题的能力,培养学生团队协作集成程序模块及调试能力;3、培养学生初步的软件设计及软件测试的能力。
设计任务及要求
基本要求:
1、学生必须仔细阅读《数据结构》课程设计指导书,认真主动完成课设的要求。
有问题及时主动通过各种方式与教师联系沟通;
2、学生要发挥自主学习的能力,充分利用时间,安排好课设的时间计划,并在课设过程中不断检测自己的计划完成情况,及时的向教师汇报;
3、课程设计按照教学要求需要一周时间完成,一周中每天(按每周5天)至少要上3-4小时的机来调试C语言设计的程序,总共至少要上机调试程序15小时;
4、根据设计报告要求编写设计报告,主要内容包括目的、意义、原理和实现方法简介、过程分析及说明、实验结果情况说明、结论;
5、每个人必须有可运行的程序,学生能对自己的程序面对教师提问并能熟练地解释清楚,学生回答的问题和程序运行的结果作为评分的主要衡量标准。
二.方案实现与调试
2.1仓库管理系统
题目内容描述:
设计一个仓库管理系统,可以按照顺序和货物名称查询仓库的存储情况,也可以增加或删除货物。
structnode
{intNO;商品编号
charname[max];商品名称
intcount;商品数量
};
2.1.1算法描述及实验步骤
主要模块的算法描述
(1)直接生成一个链表,增加则在后面直接插入一个结点
(2)定义该链表的头指针,一个个指下去,直到它等于要查询的结点,打印并推出。
(3)删除流程图
主界面选项要求输入数字,错误输入有提示且要求重新输入。
货物信息输入时,编号为整型,名称为10个字符,数量为整型。
同时输入货物信息时,编号输入n作为结束符。
2.1.2调试过程及实验结果
(1)存入仓库货物信息
(2)打印出仓库货物信息并插入、增加货物信息,分别存入要增加商品编号、商品名称、数量。
(3)增加后并一起打印出来,列表如下。
接下来实现查询功能,你可以根据商品编号查询,也可以跟据商品名称查询,若仓库里没有该商品信息,则输出查找失败。
若存在,则输出其他对应的商品信息。
(4)删除功能。
输入要删除的商品编号,则该商品在仓库里的记录取消;删除后打印出剩余商品的信息。
最后按相应提示结束系统操作。
.
2.2通讯录管理系统
题目描述:
通讯录一般包括通讯者的编号、姓名、性别、电话及地址等信息,设计一个通讯录要求实现通讯者的插入、查询、删除、更新、排序操作structnode
{charnum[5];编号
charname[8];姓名
charsex;性别
chartel[8];电话
charaddress[100];地址
};
2.2.1算法描述及实验步骤
主要模块的算法描述
(1)插入、查询、删除功能与上题仓库管理系统一样
(2)排序功能。
我采用冒泡排序法,分为降序、升序两方式。
其中最主要是交换两结点,这步较繁琐。
下面为交换流程图。
p1为p的前指针,q1为q的前指针,比较p、q大小,当符合条件,交换p、q结点,并重新交换p、q指针。
2.2.2调试过程及实验结果
该通讯录管理系统与仓库管理系统类似,新添加了一个排序功能。
(1)存入通讯录信息,生成一个链表。
(2)打印并输出通讯录信息,列表如下。
之后实现插入功能,在其链表后面插入一个新结点,生成一个新链表。
分别输入通讯者的编号、姓名、性别、电话、
地
(3)插入后并一起打印出来,列表如下。
接下来实现查询功能,你可以根据通讯者的编号查询,也可以跟据姓名查询,若通讯录里没有该通讯者信息,则输出查找失败若存在,则输出其他对应的通讯者的信息
(4)实现删除功能,输入通讯者的编号,则删除该编号对应的其他信息。
删除该编号对应的其他信息。
删除后打印剩余通讯者的信息,最后退出系统。
(5)排序功能。
排序分为降序、升序两种方式。
由于根据编号排序,通过比较编号的大小依次排序。
2.3猴子选大王
题目内容描述
任务:
一堆猴子都有编号,编号是1,2,3...m,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第N个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。
要求:
输入数据:
输入m,nm,n为整数,n 中文提示按照m个猴子,数n个数的方法,输出为大王的猴子是几号,建立一个函数来实现此功能 2.3.1算法描述及实验步骤 主要模块的算法描述 主要函数voidSelect(LinkList) 运用单循环链表来实现,尾结点指向头结点,定义一个中间变量i来实现,当i=n时,删除该结点,i重新申请为0,指针继续指下去,直到删除到只剩一个结点,也就是说,该指针的下一个指针还是指向本身。 2.3.2调试过程及实验结果 删除报数为n的结点,直到只剩一个结点,则该结点为最终结果,猴子大王。 2.4.二叉树运算(最近祖先) 题目内容描述: 任务: 求二叉树中指定两个结点共同的最近祖先 2.4.1算法描述及实验步骤 主要模块的算法描述: 先生成一个二叉排序树,用链表指针来存储。 之后运用递归算法求叶子结点,另外申请一个指向二叉树的结构指针来存储叶子结点,生成一个单链表,最后打印出链表。 链接是用叶子结点的右孩子域存放指针。 voidCreateBiTree创建二叉树SearchAncestors查找最近祖先。 算法的改进方法: 上树存储为整型,可以改进定义为其他类型,建立二叉树 2.4.2调试过程及实验结果 创建树 查找 2.5各种排序 题目内容描述: 任务: 用程序实现插入法排序、起泡法改进算法排序;利用插入排序和冒泡法的改进算法,将用户随机输入的一列数按递增的顺序排好。 输入的数据形式为任何一个正整数,大小不限。 输出的形式: 数字大小逐个递增的数列。 2.5.1算法描述及实验步骤 主要模块的算法描述: 直接插入排序的基本思想是: 当插入第i(i≥1)个对象时,前面的V[0],V[1],…,v[i-1]已经排好序。 这时,用v[i]的关键码与v[i-1],v[i-2],…的关键码顺序进行比较,找到插入位置即将v[i]插入,原来位置上的对象向后顺移。 起泡排序的基本思想是: 需反复比较相邻两个数的比较与交换这两种基本操作。 对相邻的两个数进行比较时,如果反面的数大于(或小于)前面的数,将这两个数进行交换,大的数(小的数)往前冒。 2.5.2调试过程及实验结果 直接插入法: 冒泡排序法: 三.课程设计分析与总结 本次课程设计的运行结果在不断的修改中得到完善! 使我对数据结构有了更深的理解,既培养了我运用算法与数据结构的能力,又培养了我对于团队协作集成程序模块及调试能力。 平时学的东西终于在这课程设计充分体现出来! 这次又学到了很多! 四.源程序清单 一: 仓库管理 #include printf("numbersnamequantity\n"); printf("001naicha100\n"); printf("002"); printf("003qiaokeli300\n"); } voidshowlist() {printf("1.addgoods\n"); printf("2.lookupgoods\n"); printf("3.deletegoods\n"); printf("4.exitsystem\n"); printf("=================================\n"); } GoodsInputgoods(Goods==============\n"); do{q=(Storage*)malloc(sizeof(Storage)); printf("goodsnumber"); scanf("%d",&ch1); q->NO=ch1; printf("goodsname"); scanf("%s",ch2); strcpy(q->name,ch2); printf("goodsquantity"); scanf("%d",&ch3); q->count=ch3;p->next=q;p=q;p->next=NULL; getchar(); printf("ifcontinue? (yn)"); scanf("%c",&a); printf("\n"); }while(a=='y'||a=='Y'); return"); p="); printf("b.kookupbygoodsname: \n"); printf("pleaseinputaorbtolookup: \n"); scanf("%c",&r); if(r=='a') {printf("pleaseinputgoodsnumbers: \n"); scanf("%d",&c1); getchar(); while(p&&p->NO! =c1)p=p->next; if(p==NULL)printf("nofindnothisnumber\n"); else{printf("name%s\n",p->name); printf("quantity%d\n",p->count); } } elseif(r=='b') {printf("pleaseinputgoodsname: \n"); scanf("%s",c2); getchar(); while(p&&strcmp(p2->name,c2)! =0) p2=p2->next; if(p2==NULL)printf("nofind,nothisname\n"); else{printf("numbers%d\n",p2->NO); printf("quantity%d\n",p2->count); } } else{getchar(); printf("inputwrong! \n");} getchar(); } voidDeletegoods(Goods");return;} else{while(p->next! =NULL) {s=p->next; if(s! =NULL&&s->NO==er) {p->next=s->next;break;} p=p->next; } } } voidPrintgoods(Goods"); printf("numbersnamequantity\n"); while(","); } main(){Goods,i,j; showlist1(); "); for(j=0;;j++){scanf("%d",&n); if(n<1||n>5){printf("wrong! pleaseinputagain! ! \n");continue;} elsebreak; } if(n==1){==2){Lookupgoods(==3){Deletegoods(==4)break; }printf("cangkuinformation");return0; } 二通讯录管理系统 #include printf("1.pleaseinsertthepeople\n"); printf("2.pleaselookupthepeople\n"); printf("3.pleasedeletethepeople\n"); printf("4.sortnumbers\n"); printf("5.exitsystem\n"); printf("=================================\n"); } TelInputTel(Telinformation\n"); do{q=(ListNode*)malloc(sizeof(ListNode)); printf("numbers: ");scanf("%s",ch1);strcpy(q->num,ch1); printf("name: ");scanf("%s",ch2);strcpy(q->name,ch2); printf("sex: ");scanf("%s",ch3);strcpy(q->sex,ch3); printf("telephone: ");scanf("%s",ch4);strcpy(q->tel,ch4); printf("address: ");scanf("%s",ch5);strcpy(q->address,ch5); p->next=q;p=q;p->next=NULL;getchar(); printf("ifcontinue? (yn)");scanf("%c",&a);printf("\n"); }while(a=='y'||a=='Y');return"); p=");printf("b.bynameloopup\n");printf("pleaseinputaorbtolookup\n"); scanf("%c",&r); if(r=='a'){printf("pleaseinputnumbers\n"); scanf("%d",c1);getchar(); while(p&&strcmp(p->num,c1)! =0)p=p->next; if(p==NULL)printf("nofind,nothisnumber! \n"); else{printf("name%s\n",p->name); printf("sex%s\n",p->sex);printf("telphone%d\n",p->tel);printf("adderss%s\n",p->address);} } elseif(r=='b') {printf("pleaseinputname: "); scanf("%s",c2);getchar(); while(p&&strcmp(p2->name,c2)! =0)p2=p2->next; if(p2==NULL)printf("nofind,nothisname! \n"); else{printf("number%d\n",p2->num);printf("sex%s\n",p2->sex);printf("telphone%s\n",p2->tel); printf("address%s\n",p2->address);} } else{getchar();printf("inputwrong! \n");}getchar(); } voidDeleteTel(Tel");return;} else{while(p->next! =NULL) {s=p->next;if(s! =NULL&&strcmp(s->num,er)==0) {p->next=s->next;break;}p=p->next;} } } voidSortTel(Tel");scanf("%c",&e); while(p! =NULL){while(q! =NULL) {q1=q;q=q->next; if(e=='b'){if(q! =NULL&&strcmp(p->num,q->num)>0) {if(q1==p){p->next=q->next;p1->next=q;q->next=p;} else{q1->next=q->next;q->next=p->next;p->next=q1->next; q1->next=p;p1->next=q;} t=q;q=p;p=t;} } elseif(e=='a'){if(q! =NULL&&strcmp(p->num,q->num)<0){ if(q1==p){p->next=q->next;p1->next=q;q->next=p;} else{q1->next=q->next;q->next=p->next;p->next=q1->next;q1->next=p;p1->next=q;} t=q;q=p;p=t;} } elseprintf("wrong! ! ! \n"); } q=p->next;p1=p;p=p->next; } } voidPrintTel(Tel"); printf("numbersnamesextelphoneaddress\n"); while(","); } intmain() {Tel; "); for(j=0;;j++){scanf("%d",&n); if(n<1||n>5){printf("wrong! pleaseinputagain! ! \n");continue;} elsebreak;} if(n==1){==2){LookupTel(==3){DeleteTel(==4){SortTel(==5)break; }return0; } 三猴子选大王 #include {ListNode*p,*q; inti; q=)i等于报数 {q->next=p->next;删除结点p p=q->next;p指向它的下一个结点 i=0;} else{if(i==n-1)q=p;p=p->next;} } printf("anzhao%dmonkey,shu%dnumbers,inputthemonkeyare%d",m,n,p->data); } ==========主函数============== main() {inti,m,n; charc; LinkList: \n");scanf("%d,%d",&m,&n); );getchar(); printf("ifcontinue? inputyn\n");scanf("%c",&c); if(c=='n')break;printf("\n"); } return0; 四、二叉树运算(最近祖先) #include if(SearchAncestors(T->lchild,node,a)==1){a[i]=T->data;i++;return1;} if(SearchAncestors(T->rchild,node,a)==1){a[i]=T->data;i++;return1;} }return0; } intSearch(intnode){ints; if(node==0)return0; for(s=0;num[s]! =0;s++) if(node==num[s])return1; num[s]=node;return0; } voidCreateBiTree(BiTree*T,inte,intn) {intnode; while (1) {if(n==0)printf("pleaseinputtherootnumber(0isNULL): "); if(n==1)printf("pleaseinputthe%dleftchildnumber(0isNULL): ",e); if(n==2)printf("pleaseinputthe%drightchildnumber(0isNULL): ",e); scanf("%d",&node); if(Search(node)==1)printf("%d",node); elsebreak; } if(node==0)(*T)=NULL; else{if(! ((*T)=(BiTree)malloc(sizeof(BiTNode))))return; (*T)->data=node; CreateBiTree(&((*T)->lchild),node,1); CreateBiTree(&((*T)->rchild),node,2); }return; } main() {BiTree*T; intm,j,node1,node2,a[100]={0},b[100]={0},Ancestor;clrscr(); printf("-createthetree-\n"); CreateBiTree(&T,0,0);clrscr(); printf("\ncreatesuccess! \n\n"); while (1){printf("PleaseinputthetwonodeLookingforthenearestancestors: "); scanf("%d%d",&node1,&node2); a[0]=node1;b[0]=node2; SearchAnc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 实验 报告 8212136