数据结构大作业

合集下载

湖北汽车工业学院数据结构期末大作业

湖北汽车工业学院数据结构期末大作业

数据结构大作业只收手工纸面版,统一用学院的实验稿纸。

自留底稿,不退。

(已更新单选错误地方)单选题复习用1、数据结构除了研究数据本身如何表示和存储外,还需要重点研究数据___________D_____。

(A)的数量(B)的质量(C)的属性(D)之间的关系2、以下哪种逻辑结构重点表示数据之间的层次关系。

B(A)线性结构(B)树形结构(C)图形结构(D)集合结构3、以下哪种存储结构主要是通过增加新的管理数据来同时保证读取数据的高速和动态修改数据的高速。

C(A)顺序存储(B)链接存储(C)索引结构(D)哈希存储4、遍历操作是对某个数据结构中所有数据需要做到__A____的访问。

(A)至少一次且至多一次(B)可以多次(C)大部分一次,部分可以重复(D)二次5、下面哪一句话是正确的。

C(A)算法就是可以运行的程序(B)算法是程序的总结,只能用中文表示(C)算法是表示一种解决问题的思路(D)算法最好用英语表示,这样可以很快切换成程序。

6、一个满二叉树共有三层,问有几个结点?C(A)5 (B)6 (C)7 (D)87、结点个数为4个的无向完全图的边数是多少条?B(A)5 (B)6 (C)7 (D)88、实现函数调用返回点管理应该用数据结构__C_____。

(A)二叉树(B)图(C)栈(D)队列1、二分查找法适合__C____。

(A)适合顺序表和链表等结构(B)数据不需要排序,但是必须顺序存储(C)仅仅把数据排序后的顺序表(D)二叉树和图2、在字符串结构中,哪一个是进行查找操作?D(A)求子串(B)串比较(C)串遍历(D)子串定位3、在字符串的索引结构中,哪一个操作没有对原始数据区进行处理?C(A)插入字符(B)删除字符串(C)删除行(D)修改字符4、一个m*n的矩阵,用列优先存储,元素A(i,j)存储在位置k上,在横向关系上的直接前驱在一维数组中一般地址为(约定每一个元素仅仅占一个单元):D(A)k+1 (B)k-1 (C)k+m (D)k-m5、用建立大根堆来进行排序,最后的结果是什么?A(A)升序(B)降序(C)逆序(D)不一定6、图结构的遍历操作中,一般采用什么机制可以最简单地避免再次访问已经被访问过的结点。

西南大学网教 (0012)《数据结构》大作业A 答案

西南大学网教 (0012)《数据结构》大作业A 答案

则关键字为49的地址为。

9)数据结构被形式地定义为(D, R),其中D是的有限集合,R是D上的有限集合。

10)一个算法的效率分为效率和效率。

3、应用题1)编写算法,将一个头指针为head不带头结点的单链表改造为一个单向循环链表,并分析算法的时间复杂度。

2)已知二叉树的先序遍历序列为ABCDEFGH,中序遍历序列为CBEDFAGH,画出二叉树。

然后写出该二叉树的后序遍历序列。

3)试用权集合{12,4,5,6,1,2}构造哈夫曼树,并计算哈夫曼树的带权路径长度。

4)已知图G如下所示,根据Prim算法,构造最小生成树。

(要求给出生成过程)5)设哈希表HT表长m为13,哈希函数为H(k)=k MOD m,给定的关键值序列为{19,14,23,10,68,20,84,27,55,11}。

试求出用线性探测法解决冲突时所构造的哈希表,并求出在等概率的情况下查找成功的平均查找长度ASL。

二、大作业要求大作业共需要完成22道题:第1大题必做,满分30分;第2大题必做,满分30分;第3大题选作2题,满分40分。

答卷提交要求:考试题提前公布,学生下载试题和答题卷后,在答题卷上答题。

完成后需网上提交答卷。

答卷于11月20日--12月6日通过点击页面左侧导航栏内“我的考试”-“课程论文/大作业”提交。

1、选择题1) C 2) C 3) D 4) A 5) C6) C 7) B 8) D 9) A 10) A2、填空题1) l==l->next2)栈顶3)三元组顺序表十字链表。

4)LOC (A[0][0])+(n*i+j)*k5)R[2i+1]6) 先序遍历7)n-18)99) 数据元素关系10)时间效率空间效率3、应用题2)已知二叉树的先序遍历序列为ABCDEFGH,中序遍历序列为CBEDFAGH,画出二叉树。

然后写出该二叉树的后序遍历序列。

答:后序遍历序列CEFDBHGA3)试用权集合{12,4,5,6,1,2}构造哈夫曼树,并计算哈夫曼树的带权路径长度。

数据结构大作业

数据结构大作业

数据结构作业(1)年级:2004级(2)班专业:计算机科学与技术专业学号:200431500066姓名:秦博纯病人看病模拟程序编写一个程序,反映病人到医院看病,排队看医生的情况。

在病人排队过程中,主要重复两件事:1.病人到达诊室,将病历本交给护士,排到等待队列中候诊。

2.护士从等待队列中取出下一们病人的病历,该病人进入人诊室就诊。

要求模拟病人等待这一过程,程序采用菜单方式,其选项及功能说明如下:a.排队——输入排队病人的病历号,加入病人排队队列中;b.就诊——病人排队队列中最前面的病人就诊,并将其从队列中删除;c.查看排队——从队首到队尾列出所有的排队病人的病历号;d.不再排队,余下依次就诊——从队首到队尾列出所有的排队病人的病历号,并退出运行;e.下班——退出运行。

解:本项目的组成结构如图1所示,本程序的模块结构图如图2所示,图中方框表示函数,方框中指出函数名,箭头方向表示函数间的调用关系,虚线方框表示文件的组成,即指出该虚线方框中的函数存放在哪个文件中。

文件包含如下函数:. SeeDoctor():模拟病人看病的过程。

病人排队看医生,所以要用到一个队列,这里设计了一个不带头结点的单链表作为队列。

源程序如下:图1 项目组成#include<stdio.h>#include<malloc.h>typedef struct qnode{int data;struct qnode *next;}QNode;typedef struct{QNode *front,*rear;}QuType; 图2 项目的程序结构图void SeeDoctor(){int sel,flag=1,find,no;QuType *qu;QNode *p;qu=(QuType *)malloc(sizeof(QuType)); /*创建空队*/qu->front=qu->rear=NULL;while(flag==1) /*循环执行*/{printf("1:排队2:就诊3:查看排队4:不再排队,余下依次就诊5:下班请选择");scanf("%d",&sel);switch(sel){case 1:printf(">>输入病历号:");do{scanf("%d",&no);find=0;p=qu->front;while(p!=NULL&&!find){if(p->data==no)find=1;elsep=p->next;}if(find)printf(">>输入的病历号重复,重新输入:");}while(find==1);p=(QNode *)malloc(sizeof(QNode)); /*创建结点*/p->data=no;p->next=NULL;if(qu->rear==NULL) /*第一个病人排队*/ {qu->front=qu->rear=p;}else{qu->rear->next=p; /*将*p结点入队*/qu->rear=p;}break;case 2: /*队空*/ if(qu->front==NULL)printf(">>没有排队的病人!\n");else /*队不空*/{p=qu->front;printf(">>病人%d就诊\n",p->data);if(qu->rear==p) /*只有一个病人排队*/{qu->front=qu->rear=NULL;}elsequ->front=p->next;free(p);}break;case 3: /*队空*/ if(qu->front==NULL)printf(">>没有排列的病人!\n");else /*队不空*/{p=qu->front;printf(">>排队病人: ");while(p!=NULL){printf("%d ",p->data);p=p->next;}printf("\n");}break;case 4: /*队空*/ if(qu->front==NULL)printf(">>没有排队的病人!\n");else /*队不空*/{p=qu->front;printf(">>病人按以下顺序就诊: ");while(p!=NULL){printf("%d ",p->data);p=p->next;}printf("\n");}flag=0; /*退出*/break;case 5: /*队不空*/ if(qu->front!=NULL)printf(">>请排队的病人明天就医!\n");flag=0; /*退出*/break;}}}void main(){SeeDoctor();}程序运行结果如下:。

数据结构大作业

数据结构大作业

数据结构大作业在计算机科学领域中,数据结构是非常重要的一个概念。

它是指组织和存储数据的方式,以及对数据进行操作的方法。

数据结构的选择与实现直接影响着算法的复杂度和程序的性能。

因此,在学习数据结构的过程中,一般都会有相应的大作业,以帮助学生更好地理解和应用所学的知识。

本篇文章将重点介绍数据结构大作业的一般要求和一种可能的实现方案,供读者参考。

一、数据结构大作业要求数据结构大作业一般旨在让学生将所学的数据结构知识应用于实际问题的解决。

作业要求通常包括以下几个方面:1. 题目选择:作业题目需要涵盖数据结构的各个方面,例如链表、栈、队列、树、图等等。

题目应具备一定的难度,能够考察学生对数据结构的理解和运用能力。

2. 实现方式:学生需要根据题目要求选择合适的数据结构和算法,并进行实现。

一般要求使用编程语言来完成实现,并给出相应的代码。

3. 功能要求:作业题目通常会要求实现某些特定的功能或解决某些问题。

学生需要确保所实现的程序能够满足这些功能需求,并能正确运行。

4. 性能评估:作业可能会要求对所实现的程序进行性能评估,比如时间复杂度、空间复杂度等。

学生需要能够分析和解释程序的性能,并对可能的改进方法进行讨论。

5. 报告撰写:作业一般要求学生完成一份报告,对所实现的程序进行详细的说明和分析。

报告需要包括程序设计思路、实现细节、运行结果以及遇到的问题和解决方法等。

二、数据结构大作业实现方案示例以下是一个可能的数据结构大作业实现方案示例,以一个简化的社交网络系统为题目:1. 题目描述:设计一个基于图的社交网络系统,能够实现用户的注册、好友关系的建立和查询、用户之间的消息传递等功能。

2. 数据结构选择:可以使用图的数据结构来存储用户和好友关系的信息,使用链表来存储用户的消息队列。

3. 算法实现:根据题目要求,需要实现用户注册、好友关系的建立和查询、消息传递等功能的算法。

可以使用深度优先搜索或广度优先搜索算法来查找用户的好友关系,使用链表来实现用户消息的发送和接收。

数据结构大作业实验报告要求范文

数据结构大作业实验报告要求范文

浙江工商大学计算机与信息工程学院数据结构实验大作业报告专业:班级:学号:姓名:指导教师:年月一、大作业报告内容包括以下几个部分⒈问题描述:(题目)⒉设计:⑴数据结构设计和核心算法设计描述;⑵主控及功能模块层次结构;⑶主要功能模块的输入、处理(算法框架描述)和输出;⑷功能模块之间的调用与被调用关系等。

⒊测试:测试范例,测试结果,测试结果的分析与讨论,测试过程中遇到的主要问题及所采用的解决措施。

⒋使用说明和作业小结:⑴使用说明主要描述如何使用你的程序以及使用时的主要事项;⑵在小结中说明程序的改进思想、经验和体会;⒌整理一份程序清单及运行示例的结果。

将以上各项文字材料及程序清单等装订成册,形成一个完整的报告。

题目从以下题目中任选一个,每人1个题目。

(一)试设计一个航空客运定票系统。

基本要求如下:1、每条航线所涉及的信息有:终点站名、航班号、飞机号、飞机周日(星期几)、乘员定额、余票量、订定票的客户名单(包括姓名、订票量、舱位等级1,2或3)以及等候替补的客户名单(包括姓名、所需数量)。

2、系统能实现的操作和功能如下:1)查询航线:根据客户提出的终点站名输出如下信息:航班号、飞机号、星期几飞行,最近一天航班的日期和余票额;2)承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若有余票,则为客户办理订票手续,输出座位号;若已满员或余票少余订票额,则需重新询问客户要求。

若需要,可登记排队候补;3)承办退票业务:根据客户提出的情况(日期、航班号),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其它排队候补的客户。

3、实现提示:两个客户名单可分别由线性表和队列实现。

为查找方便,已订票客户的线性表应按客户姓名有序,并且,为了插入和删除方便,应以链表作为存储结构。

由于预约人数无法预计,队列也应以链表作为存储结构。

数据结构实践作业

数据结构实践作业

数据结构作业利用单向链表数据结构完成对链表的如下操作:1、创建一条含整数结点的无序链表2、链表结点的输出3、链表结点的升序排序4、分别计算链表中奇数和偶数结点之和并输出5、释放链表具体要求将程序功能做成菜单,形式如下:1、创建一条含整数结点的无序链表2、链表结点的输出3、链表结点的升序排序4、分别计算链表中奇数和偶数结点之和并输出5、释放链表0、退出《数据结构》大作业1 总体要求将程序功能做成菜单,形式如下:(1)创建一条含整数结点的无序链表(2)链表结点的输出(3)链表结点的升序排序(4)分别计算链表中奇数和偶数结点之和并输出(5)释放链表2 开发环境软件环境:Window10,Visual Studio 20173 系统运行效果截图(1)主菜单:(2)创建一条含整数结点的无序链表:3,6,2,5,9(3)链表结点的输出(4)链表结点的升序排序(5)分别计算链表中奇数和偶数结点之和并输出(6)释放链表4 源程序#include<iostream>//头文件using namespace std;//节点数据结构定义struct node{int data;node *next;};//创建一条含整数结点的无序链表node *CreateLinkList(){node *p1, *p2, *head;int n;p2 = NULL;head = NULL;cout <<"正在创建一个无序链表\n";cout <<"请输入一个整数,以-1结束:";cin >> n;//循环输入一个整数,直到数值为-1结束,创建一条无序链表while (n != -1){p1 = new node;p1->data = n;//采用尾插法,新建一个结点并连接到链表尾部if (head == 0){head = p1; p2 = p1; //首结点的建立}else{p2->next = p1; p2 = p1;}cout <<"请输入一个整数,以-1结束:";cin >> n;}if (head != 0) //尾结点p2->next = 0;return(head);}//输出结点void PrintLinkList(const node *head){const node *p;p = head;while (p != NULL){cout <<" "<< (p->data);p = p->next;}cout << endl;}//升序排序void SortLinkList(node *head){node temp;node *p = NULL;node *q = NULL;//判断结点为空或者只有一个结点if (head == NULL || head->next == NULL){return;}//p->next!=NULL为链表倒数第2个结点for (p = head; p->next != NULL; p = p->next) {for (q = p->next; q != NULL; q = q->next){if (p->data > q->data) //升序{ //交换数据域temp.data = q->data;q->data = p->data;p->data = temp.data;}}}return;}//奇数结点和int OddSumLinkList(const node *head){int sum = 0;const node *p;p = head;while (p){//判断数值为是否奇数if (p->data % 2 != 0){sum = sum + p->data;}p = p->next;}return sum;}//偶数结点和int EvenSumLinkList(const node *head){int sum = 0;const node *p;p = head;while (p){//判断是否偶数if (p->data % 2 == 0){sum = sum + p->data; //偶数结点的数值累加}p = p->next;}return sum;}//释放链表void DeleteLinkList(node *head){node *p;while (head){p = head;head = head->next;delete p;}printf("释放成功\n");}void main(){node *head;head = NULL;int select;cout <<"************菜单************"<< endl;cout <<"输入对应选择,执行对应操作"<< endl;cout <<"1.创建一条含整数结点的无序链表"<< endl;cout <<"2.链表结点的输出"<< endl;cout <<"3.链表节点的升序排序"<< endl;cout <<"4.分别计算链表中奇数和偶数结点之和并输出"<< endl;cout <<"5.释放链表"<< endl;cout <<"0.退出"<< endl;while (1){cout <<"\n请输入选择:";cin >> select;switch (select) //判断选项,并执行对应的函数{case 1:{head = CreateLinkList();printf("无序链表创建完成\n");break;}case 2:{printf("输出链表中各结点数据:");PrintLinkList(head);break;}case 3:{SortLinkList(head);printf("升序后:");PrintLinkList(head);break;}case 4:{int oddsum;int evensum;oddsum = OddSumLinkList(head);evensum = EvenSumLinkList(head);printf("奇数和= %d,偶数和= %d\n", oddsum, evensum);break;}case 5:{DeleteLinkList(head);break;}case 0:{cout <<"退出"<< endl;exit(0);}default:{cout <<"输入选项有误,请重新输入:"<< endl;break;}}}}。

数据结构(大作业)

数据结构(大作业)

一、应用题(每小题10分,共50分)
1.把下图中的二叉树转化成森林。

2.给定表(45,36,56,6,64,32,8,41),按数据元素在表中的次序构造一棵二叉查找树。

3.写出中缀表达式A-(B+C/D)*E的后缀形式。

ABCD/+E*-
4. 下图是一个地区的交通网络模型,顶点表示城市,边表示城市间的公路,边的权值表示构造公路的费用,请问如何构造出能连通各个城市且造价最低的交通网,并写出其构造过程。

5. 已知数据序列为12,5,9,20,6,31,24,对该数据序列进行排序,试写出冒泡排序每趟的结果。

二、算法设计题(每小题50分,共25分)
1.判断单链表head(head 指向表头)是否是递增的。

2.设一棵二叉树以二叉链表为存储结构,试写一算法求该二叉树上度为2的结点个数。

则返回递归求左子树度为2节点个数。

情况3,则返回0算法步骤,如果r 既有左孩子又有右孩子,如果r 只有左孩子,则返回1 + 递归求左子树度为2节点个数+ 递归求右子树度为2节点个数,如果r 只有右孩子。

情况4。

情况2,则返回递归求右子树度为2节点个数。

情况1:
设根节点为r,如果r 既没有左孩子又没有右孩子。

数据结构大作业设计

数据结构大作业设计

作业要求:1)至少选择下面一个题目,完整实现。

2)对于下面问题,基本要求里面的功能一定要实现;同时,根据个人对于实际问题的理解,尽可能的完善解决问题的方法(提高要求里面给出了简单的进一步完善的方向)。

3)写出详细的设计文档:(不少于3000字)A.说明书格式(见《数据结构大作业说明书》)B.正文要分章节,正文为5号宋体,具体的章节可参考上面设计说明书格式。

C.正文内容:1)概述:开发环境及安装配置,项目的需求分析。

2)程序概要设计:程序的功能模块、程序的流程(可画出流程图),程序的文件结构分析。

3)程序详细设计:关键代码分析(要写详细),在设计中的疑难问题解决。

4)程序的发布和测试:程序发布过程,测试过程(必须有截图说明)5)分析程序的优点和不足,遇到的困难及解决的问题,总结自己的收获。

4)程序编写规范,使用C++语言进行编程。

5)代码编写要符合规范、简单明了,适当添加注释,总行数不得少于500行。

程序要求能够正常运行,并至少能实现基本功能要求。

完成扩展功能要求将得到较高的分数。

6)作业提交时间:开学后第4周周5前;提交打印版的程序设计说明书和电子版的程序代码(材料打包成一个文件夹,文件夹以学号+姓名的方式命名,根据说明书的内容确定答辩名单,不能体现设计过程的说明书均需要参加答辩。

答辩时间和地点另行通知。

)所有材料要保留到学期末(以备答辩)7)评分标准:程序50%,程序设计说明书50%(程序说明书不能说明问题的参考答辩情况)。

凡是没有按时交的、发现拷贝、抄袭的(无论抄与被抄者)均无法通过此课程;一定要将电子版程序设计说明书和源程序一起提交如果修改的,一定要把所有修改的资料都上传到ftp,不接受U盘;如果需要答辩的同学,可以自带电脑,但是也必须把所有的资料都先上传到ftp上面,否则不接受答辩。

8)学习委员收齐打印版文档后,于第4周周五前交到办公室B1-310。

要求:电子版上交地址:计算机科学与技术1班ftp://10.5.1.5/上传/数据结构大作业/ 13计算机1班,用户名:wang,密码:wang,个人文件夹请以学号姓名命名并压缩(使用rar或者zip压缩,不要使用其他的压缩工具),如200910012002张三。

数据结构大作业题目及要求

数据结构大作业题目及要求

一、Josephu 问题Josephu 问题为:设编号为1,2,…n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m 的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列。

提示:用一个不带头结点的循环链表来处理Josephu 问题:先构成一个有n个结点的单循环链表,然后由k结点起从1开始计数,计到m时,对应结点从链表中删除,然后再从被删除结点的下一个结点又从1开始计数,直到最后一个结点从链表中删除算法结束。

二、稀疏矩阵的操作基本功能要求:稀疏矩阵采用三元组表示,求两个具有相同行列数的稀疏矩阵A和B的相加矩阵C,并输出C,求出A的转置矩阵D,输出D。

三、背包问题的求解:假设有一个能装入总体积为T的背包和n件体积分别为w1 , w2 , …, wn 的物品,能否从n件物品中挑选若干件恰好装满背包,即使w1 +w2 + …+ wn=T,要求找出所有满足上述条件的解。

例如:当T=10,各件物品的体积{1,8,4,3,5,2}时,可找到下列4组解:(1,4,3,2)(1,4,5)(8,2)(3,5,2)。

提示:可利用回溯法的设计思想来解决背包问题。

首先将物品排成一列,然后顺序选取物品装入背包,假设已选取了前i 件物品之后背包还没有装满,则继续选取第i+1件物品,若该件物品"太大"不能装入,则弃之而继续选取下一件,直至背包装满为止。

但如果在剩余的物品中找不到合适的物品以填满背包,则说明"刚刚"装入背包的那件物品"不合适",应将它取出"弃之一边",继续再从"它之后"的物品中选取,如此重复,,直至求得满足条件的解,或者无解。

由于回溯求解的规则规则是"后进先出"因此自然要用到栈。

四、n皇后问题问题描述:求出在一个n×n的棋盘上,放置n个不能互相捕捉的国际象棋"皇后"的所有布局要求:试编写程序实现将n个皇后放置在国际象棋棋盘的无冲突的位置上的算法,并给出所有的解。

数据结构大作业-航空公司订票系统

数据结构大作业-航空公司订票系统

数据结构大作业-航空公司订票系统一、需求分析航空公司订票系统是一个需要进行高效管理和数据存储的系统。

在这个系统中,我们需要实现以下功能:1.用户登录和注册:用户可以注册并登录到系统中进行机票订购和查询。

2.机票查询:用户可以查询所有的航班信息,包括机票的价格、日期、起点和终点等信息。

3.机票购买:用户可以根据自己的需求,在航班信息中选择合适的机票,并进行购买。

4.支付功能:用户可以在系统中完成支付,并获得机票的二维码。

为了实现上述的功能,我们将采取以下的数据结构来设计和实现航空公司订票系统。

二、数据结构设计1. 航班信息表我们需要在系统中存储所有航班的信息,包括航班编号、起飞时间、起点、终点、票价等属性,因此我们可以使用以下数据结构来进行存储和管理航班信息。

typedef struct {char id[MAX_ID_LENGTH]; // 航班编号char departure[MAX_LOCATION_LENGTH]; // 起点char destination[MAX_LOCATION_LENGTH]; // 终点char date[MAX_DATE_LENGTH]; // 起飞日期char time[MAX_TIME_LENGTH]; // 起飞时间int price; // 票价} Flight;使用以上数据类型存储航班信息,我们可以建立一个包含所有航班的线性表来存储和管理所有的航班信息。

2. 用户信息表我们需要在系统中存储所有用户的信息,包括用户的账号、密码、姓名、身份证号码等属性,因此我们可以使用以下数据结构来进行存储和管理用户信息。

typedef struct {char username[MAX_USERNAME_LENGTH]; // 用户名char password[MAX_PASSWORD_LENGTH]; // 密码char name[MAX_NAME_LENGTH]; // 姓名char id[MAX_ID_LENGTH]; // 身份证号码} User;使用以上数据类型存储用户信息,我们可以建立一个包含所有用户的线性表来存储和管理所有的用户信息。

家谱管理系统 -数据结构大作业

家谱管理系统 -数据结构大作业

家谱管理系统 -数据结构大作业家谱管理系统数据结构大作业在当今数字化的时代,信息管理系统在各个领域都发挥着重要作用。

家谱作为家族历史和传承的重要记录,也需要一个高效、便捷的管理系统来保存、整理和查询相关信息。

本次数据结构大作业,我将深入探讨家谱管理系统的设计与实现。

一、需求分析家谱管理系统的主要用户包括家族成员和对家族历史感兴趣的研究者。

系统需要满足以下基本需求:1、能够存储家族成员的详细信息,如姓名、出生日期、逝世日期、籍贯、职业等。

2、支持家族关系的建立和维护,如父子、母子、夫妻等关系。

3、提供便捷的查询功能,用户可以根据姓名、出生日期、关系等条件快速找到所需的家族成员信息。

4、支持家谱的可视化展示,以清晰呈现家族成员之间的关系结构。

5、具备数据的添加、删除和修改功能,以保证家谱信息的及时更新。

二、数据结构选择为了有效地存储和管理家谱数据,我们需要选择合适的数据结构。

考虑到家谱中家族成员之间的层次关系,树结构是一个理想的选择。

在这里,我们可以使用二叉树来表示家族关系。

每个节点代表一个家族成员,节点中存储成员的相关信息。

父节点与左子节点表示父子关系,父节点与右子节点表示父女关系。

另外,为了提高查询效率,我们还可以结合哈希表来存储家族成员的信息。

通过哈希函数将成员的关键信息(如姓名)映射到哈希表中的特定位置,从而实现快速的查找和访问。

三、系统功能模块设计1、数据录入模块提供友好的用户界面,方便用户输入家族成员的信息。

对输入的数据进行合法性检查,确保信息的准确性和完整性。

2、数据存储模块利用选择的数据结构(二叉树和哈希表)将家族成员的信息进行存储。

确保数据的安全存储,防止数据丢失或损坏。

3、查询模块支持多种查询条件,如按姓名、出生日期、关系等进行查询。

快速返回查询结果,并以清晰的方式展示给用户。

4、关系维护模块允许用户添加新的家族成员,并建立其与其他成员的关系。

支持修改和删除家族成员的信息及关系。

数据结构大作业例子

数据结构大作业例子

数据结构大作业专业:班级:题目:最小生成树Kruskal算法学生姓名:目录1.任务与目标 (1)1.1课程设计内容 (1)1.2课程设计要求 (1)2.方案设计与论证 (2)2.1课设题目粗略分析 (2)2.2原理图介绍 (4)2.2.1 功能模块图 (4)2.2.2 流程图分析 (5)3.算法说明 (11)3.1存储结构 (11)3.2算法描述 (11)4.程序运行的测试与分析 (13)4.1调试过程 (13)1.2程序执行过程 (13)5.结论与心得 (16)6.参考文献 (16)7.附录(关键部分程序清单) (17)1.任务与目标1.1 课程设计内容编写算法能够建立带权图,并能够用Kruskal算法求该图的最小生成树。

最小生成树能够选择图上的任意一点做根结点。

最小生成树输出采用顶点集合和边的集合的形式。

1.2 课程设计要求1.顶点信息用字符串,数据可自行设定。

2.参考相应的资料,独立完成课程设计任务。

3.交规范课程设计报告和软件代码。

2.方案设计与论证2.1 课设题目粗略分析根据课设题目要求,拟将整体程序分为三大模块。

以下是三个模块的大体分析:1.要确定图的存储形式,通过对题目要求的具体分析。

发现该题的主要操作是路径的输出,因此采用边集数组(每个元素是一个结构体,包括起点、终点和权值)和邻接矩阵比较方便以后的编程。

2.Kruskal算法。

该算法设置了集合A,该集合一直是某最小生成树的子集。

在每步决定是否把边(u,v)添加到集合A中,其添加条件是A∪{(u,v)}仍然是最小生成树的子集。

我们称这样的边为A的安全边,因为可以安全地把它添加到A中而不会破坏上述条件。

3.Dijkstra算法。

算法的基本思路是:假设每个点都有一对标号(d j,p j),其中d是从起源点到点j的最短路径的长度(从顶点到其本身的最短路径是零路(没有弧的路),其长度等于零);p j则是从s到j 的最短路径中j点的前一点。

数据结构实验大作业

数据结构实验大作业

数据结构实验大作业大作业要求:请大家在暑假期间将数据结构实验大作业完成后,将代码粘贴在报告中,上传到网络学堂,作业在同一个班内不允许抄袭,截至日期为9月8日。

必须独立完成。

题目:一、Josephu问题Josephu问题为:设编号为1,2,…n的n个人围坐一圈,约定编号为k (1<=k<=n)的人从1开始报数,数到m 的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列。

提示:用一个不带头结点的循环链表来处理Josephu 问题:先构成一个有n个结点的单循环链表,然后由k结点起从1开始计数,计到m时,对应结点从链表中删除,然后再从被删除结点的下一个结点又从1开始计数,直到最后一个结点从链表中删除算法结束。

示意图:源代码:#include<stdio.h>struct Josephu_node{int node_nu;struct Josephu_node * pre;struct Josephu_node * next;};struct Josephu_node * Josephu_node_add(struct Josephu_node * head,int nu){struct Josephu_node * newnode;if(head == NULL){head= (struct Josephu_node *)malloc(sizeof(struct Josephu_node)); head->node_nu= 1;head->pre= head;head->next= head;printf("Creat Head:%d",head->node_nu);}else{newnode = (struct Josephu_node *)malloc(sizeof(structJosephu_node));newnode->node_nu = nu;newnode->pre = head->pre;newnode->next= head;head->pre->next= newnode;head->pre = newnode;printf(" ,%d",head->pre->node_nu);}return head;}struct Josephu_node *Joseph_node_del(struct Josephu_node * del_node) {struct Joseph_node * del_node_next=del_node->next;if(del_node != NULL){if(del_node->next != del_node){del_node->pre->next = del_node->next;del_node->next->pre = del_node->pre;}else{del_node_next = NULL;}printf(" %d,",del_node->node_nu);free(del_node);del_node = NULL;return del_node_next;}return NULL;}int main(int argc ,char ** argv){struct Josephu_node * head=NULL;struct Josephu_node * node_tmp;int nu_people=0;int out_nu =0;int i;printf("Please input the nu of the People : ");scanf("%d",&nu_people);printf("Please input the rule out nu: ");scanf("%d",&out_nu);for(i=0;i<nu_people;i++){head = Josephu_node_add(head,i+1);}printf("\n");i = 0;node_tmp = head;printf("Out of the table: ");while(node_tmp != node_tmp->pre){if(i == out_nu-1){node_tmp = Joseph_node_del(node_tmp);i=0;continue;}i++;node_tmp = node_tmp->next;}node_tmp = Joseph_node_del(node_tmp);printf("\n");return 0;}二、稀疏矩阵的操作基本功能要求:稀疏矩阵采用三元组表示,求两个具有相同行列数的稀疏矩阵A和B的相加矩阵C,并输出C,求出A的转置矩阵D,输出D。

数据结构大作业参考

数据结构大作业参考

[目录]一、实验目的二、具体实现三、程序片断四、运行结果[原文]1.向索引文件中插入一条记录的索引项;2.从索引文件中二分查找一条记录的索引项。

由上述分析可知,索引文件是有序文件,对索引文件的插入操作是在有序文件上进行的,操作后仍应是有序文件。

对有序文件通常按二进制方式进行操作,每次存取一个逻辑数据块,一个逻辑数据块可以包含一个或若干个记录。

一个逻辑数据块通常小于等于外存上一个物理数据块,而一个物理数据块的大小通常为1K至2K字节,它是进行一次外存访问操作的信息交换单位。

当从有序文件中顺序查找一个记录的插入位置时,不是使每个记录的关键字同给定关键字进行比较:而是使每个逻辑数据块中的最大关键字(即该块中最后一个记录的关键字)同给定关键字进行比较,若前者小于后者,则继续访问下一个数据块并比较,否则待插入的位置必然落在本块中。

[参考资料]数据结构最后一次的大作业数据结构:同时具有删除,添加,从大到小排序功能的链表(数字要可以键盘输入)#include<stdio.h>#include<stdlib.h>#define OK 1#define OVERFLOW -2#define ERROR 0typedef int ElemType;typedef int Status;typedef struct LNode{ElemType data;struct LNode *next;}LNode,*LinkList;void CreateList_L(LinkList &L,int n){ int i;LinkList p,rear;L=rear=(LinkList)malloc(sizeof(LNode)); L->next=NULL;for(i=1;i<=n;i++){printf("请输入第%d个元素:",i);p=(LinkList)malloc(sizeof(LNode)); scanf("%d",&p->data);p->next=NULL;rear->next=p;rear=p; }}Status ListInsert_L(LinkList &L,int i,ElemType e){ LinkList p,s;int j;p=L;j=0;while(p&&j<i-1){p=p->next;++j;}if(!p||j>i-1)return ERROR;s=(LinkList)malloc(sizeof(LNode));s->data=e;s->next=p->next;p->next=s;return OK;}Status ListDelete_L(LinkList &L,int i,ElemType &e){ LinkList p,q;int j;p=L;j=0;while(p->next&&j<i-1){p=p->next;++j;}if(!(p->next)||j>i-1)return ERROR;q=p->next;p->next=q->next;e=q->data;free(q);return OK;}Status ChangElem_L(LinkList &L,int i,ElemType e){ LinkList p;int j;p=L->next;j=1;while(p&&j<i){p=p->next;++j;}if(!p||j>i)return ERROR;p->data=e;return OK;}Status GetElem_L(LinkList L,int i,ElemType &e){ LinkList p;int j;p=L->next;j=1;while(p&&j<i){p=p->next;++j;}if(!p||j>i)return ERROR;e=p->data;return OK;}void SortList(LinkList head){LinkList p,q,large;int temp;for(p=head->next;p->next!=NULL;p=p->next) {large=p;for(q=p->next;q;q=q->next)if(q->data>large->data)large=q;if(large!=p){temp=p->data;p->data=large->data;large->data=temp;}}}void PrintList(LinkList L){LinkList p;p=L->next;do{printf("%d,",p->data);p=p->next; }while(p);printf("\n");}void main(){int n,e,i,flag;LinkList L;printf("请输入元素个数:");scanf("%d",&n);CreateList_L(L,n);printf("原始单链表:");PrintList(L);printf("\n请选择要进行的操作:\n1 增,2 删,3 改,4 查,5 排序\n输入选择序号:");scanf("%d",&flag);switch(flag){case 1:printf("请输入要插入的元素:");scanf("%d",&e);printf("请输入要插入的位置:");scanf("%d",&i);ListInsert_L(L,i,e);printf("改变后的单链表:");PrintList(L);break;case 2:printf("请输入要删除元素的位置:");scanf("%d",&i);ListDelete_L(L,i,e);printf("改变后的单链表:");PrintList(L);break;case 3:printf("请输入新的值:");scanf("%d",&e);printf("请输入要修改元素的位置:");scanf("%d",&i);ChangElem_L(L,i,e);printf("改变后的单链表:");PrintList(L);break;case 4:printf("请输入要查找元素的位置:");scanf("%d",&i);GetElem_L(L,i,e);printf("第%d个元素的值是:%d\n",i,e);break;case 5:SortList(L);printf("从大到小排序后的链表:\n"); PrintList(L);break; default:printf("你输入的选择不存在!\n"); break;}}能实现增删改查和排序我运行的时候没错误啊?能说一下是什么错误吗,VC++下面有提示的数据结构的问题---(1)查找单循环元素,链表中第i个,并输出其值.要求:i通过键盘输入.数据结构的问题(2)在单链表的第i个位置插入元素x。

《数据结构》大作业方案

《数据结构》大作业方案

《数据结构》大作业方案一.大作业成果上交时间,上交方法上交时间:17周四下午 2:00到2:30将所需要上交的部分交至工科大楼501。

上交方法:1.每个同学的"大作业计划安排"以E-mail 形式上交, wk1307@ ;2.最后成果上交要求有两部分,一是磁盘(可以以班为单位上交,每位同学建立一个名称为"姓名-学号"的文件夹),二是打印文档。

要求学生在上交时间前,应将所做的所有需要上交的内容压缩到.zip 或.rar 文件中,存储到一个磁盘中上交;以磁盘形式上交,要求学生目录清晰,磁盘中包含所有要求上交的内容,并及时主动与教师联系确认磁盘文件可以打开;其中"大作业报告"和"大作业总结"除了电子文档以外,还要以打印文稿的形式上交。

二.上交相关内容要求上交的成果的内容必须由以下四个部分组成,缺一不可。

1.上交源程序:学生按照大作业的具体要求所开发的所有源程序(应该放到一个文件夹中);2.上交程序的说明文件:(保存在.txt中)在说明文档中应该写明上交程序所在的目录,上交程序的主程序文件名,如果需要安装,要有程序的安装使用说明;3.大作业报告:(保存在word 文档中,文件名要求按照"姓名-学号-大作业报告"起名,如文件名为"张三-01-大作业报告".doc )按照大作业的具体要求建立的功能模块,每个模块要求按照如下几个内容认真完成;其中包括:a)需求分析:在该部分中叙述,每个模块的功能要求;b)概要设计在此说明每个部分的算法设计说明(可以是描述算法的流程图),每个程序中使用的存储结构设计说明(如果指定存储结构请写出该存储结构的定义。

c)详细设计各个算法实现的源程序,对每个题目要有相应的源程序(可以是一组源程序,每个功能模块采用不同的函数实现)源程序要按照写程序的规则来编写。

要结构清晰,重点函数的重点变量,重点功能部分要加上清晰的程序注释。

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、大作业设计题目
以下题目中任选一个
1.哈夫曼编码/译码器
设计要求:针对字符集A及其各字符的频率值(可统计获得),给出其中字符的哈夫曼编码,并针对一段文本(定义在A上),进行编码和译码,实现哈夫曼编码/译码系统。

2.算术表达式求值
设计要求:输入任意一个算术四则表达式,可求出其值。

3.一元多项式的代数运算
设计要求:计算任意两个一元多项式的加法、减法和乘法。

4.最小生成树问题
设计要求:在n个城市之间架设网络,只需保证连通即可,求最经济的架设方法。

二、大作业报告要求
大作业报告的开头应给出题目、班级、姓名、学号和完成日期,并包括以下7个内容:
1.需求分析
以无歧义的陈述说明程序设计的任务,强调的是程序要做什么?并明确规定:
(1) 输入的形式和输入值的范围;
(2) 输出的形式;
(3) 程序所能达到的功能;
(4) 测试数据:包括正确的输入及其输出结果和含有错误的输入及其输出结果。

2.概要设计
说明本程序中用到的所有抽象数据类型的定义、主程序的流程以及各程序模块之间的层次(调用)关系。

3.详细设计
实现概要设计中定义的所有数据类型,对每个操作只需要写出伪码算法;对主程序和其他模块也都需要写出伪码算法(伪码算法达到的详细程度建议为:按照伪码算法可以在计算机键盘直接输入高级程序设计语言程序);画出函数和过程的调用关系图。

4.调试分析
内容包括:
a.调试过程中遇到的问题是如何解决的以及对设计与实现的回顾讨论和分析;
b.算法的时空分析(包括基本操作和其他算法的时间复杂度和空间复杂度的分析)和
改进设想;
c.经验和体会等。

5.用户使用说明
说明如何使用你编写的程序,详细列出每一步的操作步骤。

6.测试结果
列出你的测试结果,包括输入和输出。

这里的测试数据应该完整和严格,最好多于需求分析中所列。

7.附录
带注释的源程序。

如果提交源程序软盘,可以只列出程序文件名的清单。

相关文档
最新文档