欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    数据结构(C语言)课程设计.doc

    • 资源ID:2385368       资源大小:194KB        全文页数:25页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    数据结构(C语言)课程设计.doc

    数据结构与算法课程设计报告(2012 2013学年 第 1 学期) 计算机与信息工程学院2013年7月8日目 录一. 课程设计的目的与要求(含设计指标)2二. 方案实现与调试22.1 题目:航班查询系统22.2题目:字符串操作42.3:二叉树的运算262.4二叉树运算18三课程设计分析与总结10四. 源程序清单102.1航班查询系统102.2字符串操作182.3二叉树运算2192.4二叉树运算22设计日志25一. 课程设计的目的与要求(含设计指标) 设计目的1、培养学生运用算法与数据结构的基本知识解决实际编程中的数据结构设计和算法设计问题。2、培养学生独立设计程序与解决问题的能力,培养学生团队协作集成程序模块及调试能力。3、培养学生初步的软件设计及软件测试的能力。基本要求:学生必须仔细阅读数据结构课程设计指导书,认真主动完成课程设计的要求。有问题及时主动通过各种方式与教师联系沟通。学生要发挥自主学习的能力,充分利用时间,安排好课设的时间计划,并在课程设计过程中不断检测自己的计划完成情况,有困难及时向教师汇报。课程设计按照教学要求需要一周时间完成,一周中每天(按每周5天)上机调试程序时间不少于4小时,总共至少要上机调试程序15小时。根据设计报告要求编写设计报告,主要内容包括目的、意义、原理和实现方法简介、过程分析及说明、实验结果情况说明、结论。每位同学必须有可运行的程序,学生能清楚解释各自编写的程序,并回答教师的提问,学生回答的问题和程序运行的结果作为评分的主要衡量标准;(周三开始逐一检查)。二. 方案实现与调试2.1 题目:航班查询系统 2.1.1 题目内容 飞机航班信息包括:航班号、起点站、终点站、起飞时间、到达时间、机型以及票价,实例如下:设计航班查询系统要求能对飞机航班信息进行增加、删除、排序和查找。可按航班的航班号、起点站、终点站、起飞时间以及到达时间进行查询2.1.2算法描述及实验步骤 算法描述该航班查询系统采用线性链表存储。开始,创建链表。然后输出提示操作选项,由用户输入所选项序号。执行选项。当第一次操作结束后,提示是否继续进行操作,再有用户决定。 流程图 开始初始化变量输入操作选项判断选项执行操作输出执行结果判断是否继续操作结束是否2.1.3调试过程及实验结果 (1) 完成第一模块:链表创建以及添加,编译时出现警告:“warning C4091: 'typedef ' : ignored on left of 'struct fly' when no variable is declared”,“typedef”时在结构体后面定义一个变量名,所以只需在结构体后面加一个变量名,或者是把结构体的“typedef”去掉。运行,结果提示错误。重新检查,发现调用的创建函数和添加函数位置放反了,修改错误,运行成功。 (2)完成其他模块。在编写排序模块时,链表的排序不懂,通过网上查找,用冒泡法,通过调换链表节点的数据进行排序。2.2题目:字符串操作 2.2.1题目内容字符串采用数组存储,建立两个字符串String1和String2.输出两个字符串。将字符串String2的头n个字符添加到String1的尾部,输出结果 查找String3在串String1中的位置,若String3在String1中不存在,则插入String3在String1中的m位置上。输出结果。2.2.2算法描述及实验步骤算法描述开始,输入两个字符串,然后将string2复制到string1后面。然后输string3,判断string3是否在string1内,若存在,输出找到;若不存在,输入插入位置,然后将string3插入string1中,输出string1,结束。流程图开始初始化变量输入两个字符串合并两个字符串输入字符串3判断3是否存在1中输出结果将3添加到1中结束是否2.2.3调试过程及实验结果(1)拷贝string3到string1时,因为移动string1后面的字符,忘了加结束标志,结果输出乱码。2.3:二叉树的运算2 2.3.1题目内容 任务 :请设计一个算法,把二叉树的叶子结点按从左到右的顺序连成一个单链表。二叉树用二叉链存储,链接时用叶子结点的rchild 域存放指针。2.3.2算法描述及实验步骤 算法描述 该题采用线性链表存储结构。开始,创建二叉树,链表。遍历整棵二叉树,查找叶子节 点,当找到是,将叶子节点放入链表当中。输出结果,结束。 流程图开始初始化变量创建二叉树创建链表输入数据遍历二叉树判断是否为叶子节点加入链表中输出链表结束判断是否结束是是否否2.3.3调试过程及实验结果2.4二叉树运算1 2.4.1题目内容 任务:求二叉树中指定两个结点共同的最近祖先。2.4.2算法描述及实验步骤算法描述 开始,创建二叉树。输入要查找的两个节点。判断两个节点位于根节点的哪一侧,若位于两侧,这根节点为它们的最近共同祖先,否则用递归遍历继续判断,查找。最后输出结果,结束。流程图开始初始化变量创建链表输入查找的节点是否位于根节点的两侧往节点所在一侧遍历输出结果结束是否2.4.3调试过程及实验结果 调试过程 这道题的核心的内容是找到要查找的两个节点,然后再找共同祖先,所以我采用的一下方法: 创建的树是事先排好序的,大于根节点的放在右边,小于根节点的放左边,相等输不进去。所以,通过判断查找的节点位于根节点的那一边,然后往那边查找。当两节点位于上一节点两侧时,则上一节点为最近共同祖先。 运行结果:三课程设计分析与总结1、这次课程设计为我们提供了一次实践机会,让我们用所学知识有所运用。2、在这次课程设计上,巩固了以前所学,并且查缺补漏;通过这次课程设计,有学习了许多新知识。四. 源程序清单2.1航班查询系统#include<stdio.h>#include<stdlib.h>#include<string.h>#define ERROR 1#define OK 0typedef int Status; /给int一个别名Statustypedef struct fly /定义结构体char Flynum6;char star10;char reach10;char startime6;char reachtime10;char Type10;int price;typedef struct node /定义航班信息链表的机构体struct fly data; /数据域struct node *next; /指针域Node,*Link; void CreateList(Link &L) L = ( Link ) malloc ( sizeof ( Node ) ); L->next = NULL; / 先建立一个带头结点的空链表 Status ListInsert(Link &L ) /增加航班信息Link p,s,r;s=L->next;r=L;p = ( Link ) malloc ( sizeof ( Node ) ); /生成新节点if(!p)printf("n空间分配失败");return ERROR;printf("n请输入航班信息");scanf("%s%s%s%s%s%s%d",&p->data.Flynum,&p->data.star,&p->data.reach,&p->data.startime,&p->data.reachtime,&p->data.Type,&p->data.price); while(s!=NULL) /判断该航班是否已经安排了if(strcmp(p->data.Flynum,s->data.Flynum)=0)printf("n该航班已经重复");return ERROR;s=s->next;while ( r->next!=NULL) /添加航班 r=r->next; p->next=r->next;r->next=p;return OK;Status Delete(Link &L) /删除航班信息Link p,q;char num10;printf("n请输入要删除的航班号:");scanf("%s",&num);q=L;p=L->next;while(p->next!=NULL)if(strcmp(num,p->data.Flynum)=0)break;q=q->next;p=p->next;q->next=p->next;free(p);return OK;void Such_num(Link L) /按航班号查询Link p;char num10;printf("n请输入要查找的航班号");scanf("%s",&num);p=L->next;while(p!=NULL)if(strcmp(num,p->data.Flynum)=0)break;p=p->next;printf(" %s ",p->data.Flynum);printf(" %s ",p->data.star);printf(" %s ",p->data.reach);printf(" %s ",p->data.startime);printf(" %s ",p->data.reachtime);printf(" %s ",p->data.Type);printf(" %d ",p->data.price);void Such_Star(Link L) /按起飞地点查询Link p;char num10;printf("n请输入起飞地点:");scanf("%s",&num);p=L->next;while(p!=NULL)if(strcmp(num,p->data.star)=0)break;p=p->next;printf(" %s ",p->data.Flynum);printf(" %s ",p->data.star);printf(" %s ",p->data.reach);printf(" %s ",p->data.startime);printf(" %s ",p->data.reachtime);printf(" %s ",p->data.Type);printf(" %d ",p->data.price);void Such_Reach(Link L) /按到达地点查询Link p;char num10;printf("n请输入到达地点:");scanf("%s",&num);p=L->next;while(p!=NULL)if(strcmp(num,p->data.reach)=0)break;p=p->next;printf(" %s ",p->data.Flynum);printf(" %s ",p->data.star);printf(" %s ",p->data.reach);printf(" %s ",p->data.startime);printf(" %s ",p->data.reachtime);printf(" %s ",p->data.Type);printf(" %d ",p->data.price);void Such_Stime(Link L) /按起飞时间查询Link p;char num10;printf("n请输入起飞时间:");scanf("%s",&num);p=L->next;while(p!=NULL)if(strcmp(num,p->data.startime)=0)break;p=p->next;printf(" %s ",p->data.Flynum);printf(" %s ",p->data.star);printf(" %s ",p->data.reach);printf(" %s ",p->data.startime);printf(" %s ",p->data.reachtime);printf(" %s ",p->data.Type);printf(" %d ",p->data.price);void Such_Rtime(Link L) /按到达时间查询Link p;char num10;printf("n请输入到达时间:");scanf("%s",&num);p=L->next;while(p!=NULL)if(strcmp(num,p->data.reachtime)=0)break;p=p->next;printf(" %s ",p->data.Flynum);printf(" %s ",p->data.star);printf(" %s ",p->data.reach);printf(" %s ",p->data.startime);printf(" %s ",p->data.reachtime);printf(" %s ",p->data.Type);printf(" %d ",p->data.price);void Show(Link L) /显示航班信息Link p;printf("n以下为所有航班信息:");p=L;while(p->next!=NULL)p=p->next;printf("n %s ",p->data.Flynum); printf(" %s ",p->data.star); printf(" %s ",p->data.reach); printf(" %s ",p->data.startime); printf(" %s ",p->data.reachtime); printf(" %s ",p->data.Type); printf(" %d ",p->data.price);printf("n");Status Sort(Link L) /排序,通过交换数据进行排序;冒泡排序法Link p,q,s;s = ( Link ) malloc ( sizeof ( Node ) ); if(!s)printf("n空间分配失败");return ERROR;for(p=L->next;p!=NULL;p=p->next)for(q=p->next;q!=NULL;q=q->next)if(strcmp(p->data.startime,q->data.startime)>0)s->data=p->data;p->data=q->data;q->data=s->data;Show(L);return OK;void main() / 主函数Link L;int i,a;printf(" |-欢迎使用航班查询系统-|n");printf("n");printf("n *");printf("n * *");printf("n * 1 显示所有航班信息 *");printf("n * 2 航班号查询 *");printf("n * 3 起飞时间查询 *");printf("n * 4 到达时间查询 *");printf("n * 5 起飞地点查询 *");printf("n * 6 到达地点查询 *");printf("n * 7 增加航班信息 *");printf("n * 8 删除航班信息 *");printf("n * 9 航班排序 *");printf("n * *");printf("n *");CreateList(L); /创建链表printf("n |-航班号-|-起飞地点-|-到达地点-|-起飞时间-|-到达时间-|-飞机类型-|-票价-|");for(i=0;i<100;i+) /用于多长操作printf("nn请输入服务编号:");scanf("%d",&a);switch(a)case 1:Show(L);break;case 2:Such_num(L);break;case 3:Such_Stime(L);break;case 4: Such_Rtime(L); break;case 5:Such_Star(L);break;case 6:Such_Reach(L);break;case 7:ListInsert(L);break;case 8:Delete(L);case 9:Sort(L);break;default:printf("输入无效");break;printf("n请按任意键继续操作! 退出请按0n");scanf("%d",&a);if(a=0)break;2.2字符串操作#include<stdio.h>#include<string.h>void main()int i,m,len1,len3,j;char string1100,string2100,string3100;char *p;printf("n请输入string1:");scanf("%s",&string1);printf("n请输入string2:");scanf("%s",&string2);printf("n请输入拷贝数N:");scanf("%d",&i);p=strncat(string1,string2,i); /调用strncat函数,完成字符串的合并。printf("%s",p);printf("n请输入string3:");scanf("%s",&string3);p=strstr(string1,string3); /查找string1中是否存在string3的片段if(p)printf("存在n");else /string3的插入printf("请输入插入位置m:");scanf("%d",&m);len3=strlen(string3);len1=strlen(string1);for(i=len1-1;i>=m-1;i-)string1i+len3=string1i;string1len1+len3='0'for(i=0,j=m-1;i<len3;i+,j+)string1j=string3i;printf("%sn",string1);2.3二叉树运算2#include <stdlib.h>#include <stdio.h>typedef int TElemType;typedef struct BiTNodeTElemType data;struct BiTNode *lchild,*rchild;BiNode, *Bitree;Bitree root;/定义根结点 void insert_data(int x) /*生成二叉排序树*/ Bitree p,q,s;s=(Bitree)malloc(sizeof(BiNode); /创建结点s->data=x; /结点赋值s->lchild=NULL;s->rchild=NULL;if(!root)root=s; elsep=root; while(p) /*如何接入二叉排序树的适当位置*/q=p;if(p->data=x) /相同结点不能重复插入printf("data already exist! n");return;else if(x<p->data)p=p->lchild; else p=p->rchild;if(x<q->data)q->lchild=s;else q->rchild=s;void CreateList(Bitree &L) L = ( Bitree ) malloc ( sizeof ( BiNode ) ); L->rchild = NULL; / 先建立一个带头结点的空链表 int PreOrderTraverse(Bitree root,Bitree &L)Bitree n,p,r;r=L;n=root;if(!n) return 0;if(n->lchild=NULL && n->rchild=NULL) /判断叶子结点并利用指针rchild生成单链表p=( Bitree )malloc( sizeof ( BiNode ) );p->data=n->data;while ( r->rchild!=NULL) r=r->rchild; p->rchild=r->rchild;r->rchild=p;return 0;if(n->lchild)PreOrderTraverse(n->lchild,L);if(n->rchild)PreOrderTraverse(n->rchild,L);return 0;/*递归输出二叉树*/DLR( Bitree root ) if (root !=NULL) /非空二叉树 printf(" %d ",root->data); /访问D DLR(root->lchild); /递归遍历左子树 DLR(root->rchild); /递归遍历右子树 return(0); void main() Bitree L;int i=1,x; /i记录结点个数,x存放结点值root=NULL; /*千万别忘了赋初值给root!*/printf("请输入数据,-9999表示输入结束n");doprintf("please input data %d:",i);i+;scanf("%d",&x); /*从键盘采集数据,以-9999表示输入结束*/if(x=-9999) printf("nNow output data value:n"); else insert_data(x); /*调用插入数据元素的函数*/while(x!=-9999);CreateList(L); DLR(root); /遍历二叉树PreOrderTraverse(root,L); /查找叶子节点printf("n Now output data:n");L=L->rchild;while(L) /输出从左到右叶子节点printf(" %d ",L->data);L=L->rchild;2.4二叉树运算#include <stdlib.h>#include <stdio.h>typedef int TElemType;typedef struct BiTNodeTElemType data;struct BiTNode *lchild,*rchild,*tag;BiNode, *Bitree;Bitree root;/定义根结点 void insert_data(int x) /*生成二叉排序树*/ Bitree p,q,s;s=(Bitree)malloc(sizeof(BiNode); /创建结点s->data=x; /结点赋值s->lchild=NULL;s->rchild=NULL;if(!root)root=s; elsep=root; while(p) /*如何接入二叉排序树的适当位置*/q=p;if(p->data=x) /相同结点不能重复插入printf("data already exist! n");return;else if(x<p->data)p->tag=p;p=p->lchild; elsep->tag=p;p=p->rchild;if(x<q->data)q->lchild=s;else q->rchild=s;DLR( Bitree root ) if (root !=NULL) /非空二叉树 printf(" %d ",root->data); /访问D DLR(root->lchild); /递归遍历左子树 DLR(root->rchild); /递归遍历右子树 return(0); int PreOrderTraverse(Bitree root, int a,int b) /*从根节点开始,判断所查找的节点在根节点的哪一边,即从那边开始遍历,若在两侧,则根节点为两者最近的共同祖先*/Bitree p;p=root;if(p->data>a&&p->data>b)PreOrderTraverse(p->lchild,a,b);else if(p->data<a&&p->data<b)PreOrderTraverse(p->rchild,a,b);else if(p->data>a&&p->data<b)|(p->data<a&&p->data>b)printf("两者最小的共同祖先为:%dn",p->data);else if(p->data=a|p->data=b)printf("两者最小的共同祖先为:%dn",a);return 0;void main() /*先生成二叉排序树*/int i=1,x,a,b; /i记录结点个数,x存放结点值root=NULL; /*千万别忘了赋初值给root!*/printf("请输入数据,-9999表示输入结束n");doprintf("please input data %d:",i);i+;scanf("%d",&x); /*从键盘采集数据,以-9999表示输入结束*/if(x=-9999) printf("nNow output data value:n"); else insert_data(x); /*调用插入数据元素的函数*/while(x!=-9999); DLR(root);printf("n请输入查找的两个节点:");scanf("%d%d",&a,&b);PreOrderTraverse(root,a,b);

    注意事项

    本文(数据结构(C语言)课程设计.doc)为本站会员(laozhun)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开