数据结构课程设计报告(仓库管理系统、通讯录管理系统、猴子选大王、
数据结构课程设计-通讯录管理系统

《数据结构》课程设计报告书题目:通讯录管理系统系别: 计算机科学与应用系学号:学生姓名:指导教师:完成日期: 2012年5月28日1 问题描述(1)题目内容:通讯录管理。
(2)基本要求:利用单链表实现通讯录的建立、通讯者的插入、通讯者的删除、通讯者的查询以及通讯录的输出。
(3)设计目的:通过本次课程设计,了解通讯录的一些基本功能。
掌握利用单链表进行插入,查找,用关键字建立单链表。
2 需求分析经过本次的课程设计,我认为通讯录主要实现的功能如下:(1)添加信息:一个通讯录应该有其基本的添加功能。
在程序设计时,我通过一个具有添加功能的函数,实现了个人信息的添加,如:姓名,性别,电话号码,QQ号码,地址。
(2)删除信息:当您不需要某个联系人的信息时,可以直接将该人的信息删除。
(3)查找:一个通讯录应该具有令一基本功能就就是查找,本设计时可以按联系人为关键字查找的,只要您输入要查找人的姓名或手机号码或QQ号码就可出来相应的个人信息。
(4)输出:一个通讯录应该具有输出所有联系人的功能,本设计按照次序可以从头到尾把通讯录中的所有联系人都输出,供自己查瞧。
(5)退出:当您做完您要做的事情之后,就可以退出该程序。
3 总体设计3、1 算法的定义LinkList Creat_LinkList()创建空单链表void Insert_LinkList(LinkList H)建立通讯录,录入联系人的信息,可以把联系人的姓名,性别,手机号,QQ号,地址录入系统。
void Locate_LinkList(LinkList H)按照联系人的姓名,手机号码,QQ号码查找通讯录中联系人的信息。
void Delete_LinkList(LinkList H)按照联系人的姓名,手机号码,QQ号码删除联系人的所有信息。
void print_LinkList(LinkList H)输出通讯录中的所有联系人的信息供使用者查瞧。
3、2 系统流程图图3-1通讯录管理功能图3、3 详细程序设计1)定义数据结构typedef struct Node //定义数据结构{char name[20];//姓名char sex[4]; //性别char tel[11];//电话号码char qq[13]; //qq号码char ad[100];//地址Node *next;//存放后继元素的地址}LNode,*LinkList;2)创建一个空的单链表LinkList Creat_LinkList(){//创建空单链表,入口参数无LinkList H;H=new LNode;if(H)//确认创建头结点创建就是否成功,若成功,修改单链表头结点的指针域为0表空表{H->next=NULL;}return H;}3)向通讯录中插入联系人void Insert_LinkList(LinkList H){LinkList p;p=new LNode;if(!p){cout<<"不能插入!"<<endl;}cout<<"请输入您要插入的联系人信息:"<<endl;cout<<"姓名:"<<endl;cin>>p->name;cout<<"性别:"<<endl;cin>>p->sex;cout<<"手机号码:"<<endl;cin>>p->tel;cout<<"QQ号码:"<<endl;cin>>p->qq;cout<<"地址:"<<endl;cin>>p->ad;p->next=H->next;H->next=p;cout<<"插入成功"<<endl;}4)查询通讯录中某个联系人的信息void Locate_LinkList(LinkList H){int x;LinkList p=H->next;cout<<"您要通过哪种方式查询?"<<endl;cout<<"1、通过联系人姓名查询"<<endl;cout<<"2、通过联系人手机号码查询"<<endl;cout<<"3、通过联系人QQ号码查询"<<endl;cin>>x;char str[30];if(x==1){cout<<"请输入您要查询的联系人的姓名:";cin>>str;while(p && strcmp(p->name,str)!=0){p=p->next;}}if(x==2){cout<<"请输入您要查询的联系人的手机号码:";cin>>str;while(p&&strcmp(p->tel,str)!=0){p=p->next;}}if(x==3){cout<<"请输入您要查询的联系人的QQ号码:";cin>>str;while(p&&strcmp(p->qq,str)!=0){p=p->next;}}if(p==NULL){cout<<"没有找到您要查找的联系人的信息!"<<endl;}else{cout<<"您要找的联系人的信息为:"<<endl;cout<<"姓名:"<<p->name<<endl;cout<<"性别:"<<p->sex<<endl;cout<<"手机号:"<<p->tel<<endl;cout<<"QQ号码"<<p->qq<<endl;cout<<"地址"<<p->ad<<endl;}}5)删除通讯录中某个联系人的信息void Delete_LinkList(LinkList H){if(H->next==NULL){cout<<"通讯录为空,不能删除"<<endl;}else{int x;char str[30];LinkList p,q;p=H->next;cout<<"请输入您要删除的方式:"<<endl;cout<<"1、按照联系人的姓名删除"<<endl;cout<<"2、按照联系人的手机号码删除"<<endl;cout<<"3、按照联系人的QQ号码删除"<<endl;cin>>x;q=H;if(x==1){cout<<"请输入您要删除的联系人的姓名:"<<endl;cin>>str;while(strcmp(p->name,str)!=0){q=p;p=p->next;}}if(x==2){cout<<"请输入您要删除的联系人的手机号码:"<<endl;cin>>str;while(strcmp(p->tel,str)!=0){q=p;p=p->next;}}if(x==3){cout<<"请输入您要删除的联系人的QQ号码:"<<endl;cin>>str;while(strcmp(p->qq,str)!=0){q=p;p=p->next;}}if(p==NULL){cout<<"没有您要删除的联系人的记录"<<endl;}else{q->next=p->next;p->next=NULL;free(p);cout<<"该联系人已删除"<<endl;}}}6)输出所有联系人void print_LinkList(LinkList H){if(H->next==NULL){cout<<"通讯录为空"<<endl;}else{LinkList p;p=H->next;while(p!=NULL){cout<<"性别:"<<p->sex<<endl;cout<<"手机号:"<<p->tel<<endl;cout<<"QQ号码:"<<p->qq<<endl;cout<<"地址:"<<p->ad<<endl;p=p->next;}}}7)主函数void main(){int a;LinkList List;List=Creat_LinkList();do{cout<<"*****欢迎进入通讯录管理*****"<<endl;cout<<"*****添加联系人请按1*****"<<endl;cout<<"*****查找联系人请按2*****"<<endl;cout<<"*****删除联系人请按3*****"<<endl;cout<<"*****输出所有联系人请按4*****"<<endl;cout<<"*****退出请按0*****"<<endl;cout<<"请输入您的选择:"<<endl;cin>>a;switch(a){case 0:break;case 1:Insert_LinkList(List);break;case 2:Locate_LinkList(List);break;case 3:Delete_LinkList(List);break;case 4:print_LinkList(List);break;}cout<<"操作完毕,请再次选择!"<<endl;}while(a!=0);}3、4 测试运行程序,瞧到主界面。
数据结构课程设计(附代码)-数据结构设计说明

应用技术学院课程设计报告课程名称《数据结构课程设计》设计题目猴子选大王;建立二叉树;各种排序;有序表的合并;成绩管理系统;院系计算机科学与信息工程专业计算机科学与技术班级学号指导教师日期一.目的与要求1. 巩固和加深对常见数据结构的理解和掌握2. 掌握基于数据结构进行算法设计的基本方法3. 掌握用高级语言实现算法的基本技能4. 掌握书写程序设计说明文档的能力5. 提高运用数据结构知识及高级语言解决非数值实际问题的能力二.课程设计容说明1. 项目一(1) 对设计任务容的概述学生成绩管理**任务:要现对学生资料的录入、浏览、插入和删除等功能。
输入:设学生成绩以记录形式存储,每个学生记录包含的信息有:学号和各门课程的成绩,设学生成绩至少3门以上。
存储结构:采用线性链式结构。
(2) 详细设计LinkList *create():输入学生成绩记录函数;void print(LinkList *head):显示全部记录函数LinkList *Delete(LinkList *head):删除记录函数LinkList *Insert(LinkList *head):插入记录函数void menu_select():菜单选择void ScoreManage():函数界面(3) 程序流程图(4) 程序模块及其接口描述该程序可以分为以下几个模块:1、菜单选择:void menu_select();提供五种可以选择的操作,在main函数过switch语句调用菜单menu_select()函数,进入不同的功能函数中完成相关操作。
2、输入功能:LinkList *create();通过一个for循环语句的控制,可以一次完成无数条记录的输入。
并将其存入链表。
3、输出功能:void print(LinkList *head);通过一个while的循环控制语句,在指针p!=NULL时,完成全部学生记录的显示。
知道不满足循环语句,程序再次回到菜单选择功能界面。
数据结构课程设计任务书报告

一、设计目的《数据结构》是一门实践性较强的软件基础课程,为了学好这门课程,必须在掌握理论知识的同时,加强上机实践。
本课程设计的目的就是要达到理论与实际应用相结合,使同学们能够根据数据对象的特性,学会数据组织的方法,能把现实世界中的实际问题在计算机内部表示出来,并培养基本的、良好的程序设计技能。
二、设计要求1、通过这次设计,要求在数据结构的逻辑特性和物理表示、数据结构的选择应用、算法的设计及其实现等方面加深对课程基本内容的理解。
同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。
2、学生必须仔细研读《数据结构》课程设计(实习)要求,以学生自学为主、指导教师指导为辅,认真、独立地完成课程设计的任务,有问题及时主动与指导教师沟通。
3、本次课程设计按照教学要求需要在一周半时间内独立完成,学生要发挥自主学习的能力,充分利用时间,安排好课设的时间计划,并在课设过程中不断检测自己的计划完成情况,及时地向指导教师汇报。
4、编程语言任选。
三、设计题目及内容文章编辑一、需求分析功能:输入一页文字,程序可以统计出文字、数字、空格的个数。
静态存储一页文章,每行最多不超过80个字符,共N行;要求:(1)分别统计出其中英文字母数和空格数及整篇文章总字数;(2)统计某一字符串在文章中出现的次数,并输出该次数;(3)删除某一子串,并将后面的字符前移。
存储结构使用线性表,分别用几个子函数实现相应的功能;输入数据的形式和范围:可以输入大写、小写的英文字母、任何数字及标点符号。
输出形式:(1)分行输出用户输入的各行字符;(2)分4行输出"全部字母数"、"数字个数"、"空格个数"、"文章总字数"(3)输出删除某一字符串后的文章;二、概要设计1、定义结构体struct line,文本行采用顺序存储,行与行之间采用链式存储开始主函数输入文字统计个数查找某一子串输出文字统计字母、数字、空删除这一子串格、某一字符串的个数以及文章总字数输出删除后的文章具体操作三、主要函数:int FindString(LINE * &head,char *str) /*统计str在文章中出现的次数*/ 求在一行中Str出现的次数的流程图:①.查找第一个字符,如果有第一个字符即p->data[i]==str[0],设计数器k=0 ②.查找这个字符后面的字符与要查找的字符串是否匹配即p->data[i+j]==str[j],如果匹配k++③.重复第二步,如果k=len2,则查找到,count++;如果没查找到,重新进行第一步void delstringword(char *s,char *str) /*删除字符串*s 中的字符串*str*/开始车离开p->data[i]==str[0]i++k=0;j=0;p->data[i+j]==str[j]k++;j++;k=len2count++; i=i+k-1;结束YNYNNY实现思想:①.从字符串s 中寻找str 第一次出现的位置 *p=strstr(s,str);②.len=strlen(s);i=len-strlen(p)即前i 项恰好不含要删除的字符串,将前i 项复制到tmp 中③.j=i+strlen(str) 即要删除的字符串在i+1和j 之间,将j 之后的字符串复制到tmp 中④.将tmp 赋给串s ,返回s四、调试分析和问题思考:1. 测试数据及结果str pi jsfor(m=0;m<i;m++) tmp[count++]=s[m];for(n=j;n<len;n++) tmp[count++]=s[n];tmp2、问题思考:输入文章时,计算机怎样识别文章是否结束?输出文章时,怎样处理表示结束的字符?解决方案:输入文章时,以Ctrl+E(^E)为结尾,当tmp[0]==5时,发现输入^E,则退出输入。
数据结构课程设计通讯录管理系统报告

数据结构课程设计通讯录管理系统报告前言通讯录管理系统是一种常见的应用程序,用于帮助用户有效地组织和管理他们的联系人信息。
本报告旨在介绍和分析一个基于数据结构设计的通讯录管理系统,其中实现了基本的通讯录功能,并且通过合适的数据结构和算法进行优化。
功能需求通讯录管理系统需要实现以下基本功能: - 添加联系人信息 - 查找联系人信息 - 删除联系人信息 - 更新联系人信息 - 显示所有联系人信息数据结构选择为了实现通讯录管理系统的功能,我们选择使用链表作为数据结构。
链表是一种简单而灵活的数据结构,可以动态地添加或删除节点,非常适合存储联系人信息这种动态的数据。
在这里,我们采用双向链表,使得查找、插入和删除操作更加高效。
算法设计添加联系人信息添加联系人信息时,我们需要遍历链表找到合适的位置插入新节点,这里的算法复杂度为O(n),其中n表示链表的长度。
查找联系人信息查找联系人信息时,我们需要遍历链表查找目标节点,这里的算法复杂度为O(n)。
删除联系人信息删除联系人信息时,我们同样需要遍历链表找到目标节点并删除,其算法复杂度为O(n)。
更新联系人信息更新联系人信息时,我们首先需要查找到目标节点,然后进行更新操作,其算法复杂度也为O(n)。
系统优化为了提高系统的性能,我们可以通过以下几种方式进行优化: - 使用哈希表索引联系人信息,减少查找联系人的时间复杂度; - 引入缓存机制,减少频繁的IO 操作。
总结通过本报告的介绍和分析,我们了解了一个基于数据结构设计的通讯录管理系统的实现原理和优化方法。
在实际应用中,针对具体需求和场景,我们可以进一步优化系统性能,提升用户体验。
通讯录管理系统作为一种简单而实用的应用程序,将在日常生活中发挥重要作用。
(库存管理)数据结构课程设计报告库存管理系统

课程设计任务书2011—2012学年第1学期电子与信息工程系计算机科学与技术专业班级课程设计名称:数据结构课程设计设计题目:库存管理系统完成期限:自2012 年 1 月2日至2012 年 1 月 6 日共 1 周设计依据、要求及主要内容(可另加附页):一、设计目的熟悉各种数据结构和运算,会使用数据结构的基本操作解决一些实际问题。
二、设计要求(1)重视课程设计环节,用严谨、科学和踏实的工作态度对待课程设计的每一项任务;(2)按照课程设计的题目要求,独立地完成各项任务,严禁抄袭;凡发现抄袭,抄袭者与被抄袭者皆以零分计入本课程设计成绩。
凡发现实验报告或源程序雷同,涉及的全部人员皆以零分计入本课程设计成绩;(3)学生在接受设计任务后,首先要按设计任务书的要求编写设计进程表;(4)认真编写课程设计报告。
三、设计内容1)问题描述试设计一库存管理系统,产品信息包括产品编号、名称、价格、数量等(产品编号不重复)。
2) 基本要求该系统应具有以下功能:1、产品信息录入功能(产品信息用文件保存)--输入2、产品信息浏览功能--输出3、产品入库4、产品出库5、查询和排序功能:1)按价格从大到小排序2)按名称查询6、产品信息删除、修改功能。
四、参考文献[1]《数据结构》. 王红梅. 清华大学出版社[2]《数据结构学习辅导与实验指导》. 王红梅. 清华大学出版社[3]《C++程序设计》. 钱能. 清华大学出版社[4]《C++程序设计试验指导》. 钱能. 清华大学出版社[5]《C++程序设计》.谭浩强. 清华大学出版社#include<iostream>#include<string>#include<iomanip>#include<fstream>using namespace std;int count=0;class CData //定义数据基类{public:CData(){};virtual int Compare(CData &)=0;virtual void Show()=0;virtual ~CData(){};};class CNode //定义结点基类{private:CData *pData; //用于指向数据类的指针CNode *pNext; //用于指向链表的后向指针public:void InputData(CData *pdata){pData=pdata;} //输入数据void ShowNode(){pData->Show();} //打印一个节点的数据CData *GetData(){return pData;}friend class CList; //定义链表类为基类};class CList{CNode *pHead; //链表头结点指针public:CList(){pHead=0;};~CList(){DeleteList();}void AddNode(CNode *pnode); //在首部添加结点CNode *DeleteNode(CNode *); //删除一个指定的结点,返回该结点的指针CNode *Search(CData &); //查找一个指定的数据,返回该数据所在的结点在链表的指针,未找到返回0bool IsExist(CData &);void ShowList(); //打印整个链表void DeleteList(); //删除整个链表CNode *GetListHead(){return pHead;} //返回链表首结点CNode *GetListNextNode(CNode *pnode); //返回链表指定结点的下一个结点};CNode *CList::GetListNextNode(CNode *pnode) //返回链表指定结点的下一个结点{CNode *p1=pnode;return p1->pNext;};void CList::AddNode(CNode *pnode) //在首部添加结点{if (pHead==0) //如果是空链表,插入的结点是唯一的结点{pHead=pnode;pnode->pNext=0;return;}else //否则,插入到链表首部{pnode->pNext=pHead;pHead=pnode;}};CNode *CList::DeleteNode(CNode *pnode) //删除一个指定的结点,返回该结点的指针{CNode *p1,*p2;p1=pHead; //指向首结点while(p1!=pnode&&p1->pNext!=0) //寻找要删除的结点{p2=p1;p1=p1->pNext; //结点p2始终在p1的后面}if (p1==pHead) //如果要删除的是首结点{pHead=pHead->pNext; //将首结点后移return pnode;}p2->pNext=p1->pNext; //p1指向被删除的结点,将p2结点与p1后面的结点连接起来return pnode;}CNode *CList::Search(CData &data) //查找一个指定的数据,返回指针,若未找到返回0 {CNode *p1=pHead;while(p1) //从头结点开始查找{if (p1->pData->Compare(data)==0)return p1; //找到后返回结点指针p1=p1->pNext;}return 0; //搜索完找不到,返回空指针0}void CList::ShowList() //打印整个链表{CNode *p1=pHead;while(p1){p1->pData->Show();p1=p1->pNext;}}void CList::DeleteList() //删除整个链表结点{CNode *p1,*p2;p1=pHead;while(p1){delete p1->pData;p2=p1;p1=p1->pNext;delete p2;}}class Repository:public CData //库存为记录,为数据基类的公有派生类{private :char szName[20]; //库存中数据:商品名、商品数量和入库时间unsigned int szNumber;char szTime[20];char szN;CList ShList;public:Repository(); //构造函数Repository(char *name,int number,char *time);void SetRecord(char *name, int number,char *time); //输入数据函数int Compare(CData &); //比较函数,比较商品名void Show();void AddRecord();void Display();void LookUpRecord();void DeleteRecord();void ModifyRecord();void SaveToFile();void Operate(string &strChoice);void ReadFromFile();void Output();};Repository::Repository(){strcpy(szName,"\0");szNumber=0;strcpy(szTime,"\0");}Repository::Repository(char *name,int number,char *time){strcpy(szName,name);szNumber=number;strcpy(szTime,time);szN=name[0];}void Repository::SetRecord(char *name, int number,char *time) //输入数据函数{strcpy(szName,name);szNumber=number;strcpy(szTime,time);szN=name[0];}int Repository::Compare(CData &data) //比较商品名{Repository &temp=(Repository &)data;return strcmp(szName,temp.szName);}void Repository::Show() //打印一个结点的数据{cout<<setw(15)<<szName<<setw(15)<<szNumber<<setw(15)<<szTime<<endl; }void Repository::AddRecord() //将记录添加到链表中{CNode *pNode;Repository *pSh;char szName[20],szTime[20];unsigned int szNumber;cout<<"请输入新商品名(输入0退出,并进入系统菜单):";cin>>szName;while(strcmp(szName,"0")){cout<<"请输入新商品入库时间: ";cin>>szTime;cout<<"请输入新商品数量: ";cin>>szNumber;pSh=new Repository; //生成新的数据累对象pSh->SetRecord(szName,szNumber,szTime); //数据类对象赋值pNode=new CNode; //生成新的结点pNode->InputData(pSh); //结点插入链表ShList.AddNode(pNode);count++;cout<<"请输入新商品名(输入0退出,并进入系统菜单) ";cin>>szName;}cout<<endl<<endl;}void Repository::Display() //显示全部链表数据{cout<<"当前操作共有"<<count<<"条新商品的添加纪录。
数据结构课程设计报告库存管理系统

数据结构课程设计报告:库存管理系统1. 引言库存管理是企业运营中至关重要的一环,它涉及到对产品或物资的存储、配送和销售等方面的管理。
为了提高库存管理的效率和准确性,本报告设计了一个基于数据结构的库存管理系统。
本报告将详细介绍系统的设计思路、功能模块以及数据结构的选择和实现。
2. 系统设计思路2.1 系统目标库存管理系统的主要目标是提供一个方便易用的界面,让用户能够方便地实现库存的管理。
系统需要支持以下功能:•添加新的产品到库存中;•删除库存中的产品;•修改库存中产品的信息;•查询库存中的产品;•统计库存中的产品数量等。
2.2 功能模块根据系统目标,我们将系统划分为以下几个功能模块:1.登录模块:实现用户登录和认证功能,确保只有授权用户可以使用系统;2.库存管理模块:实现库存的增加、删除、修改和查询功能;3.产品分类模块:实现对产品进行分类管理的功能;4.统计模块:实现对库存中产品数量和金额的统计功能。
2.3 数据结构选择为了实现库存管理系统的各个功能模块,我们需要选择适当的数据结构来存储和管理数据。
在本系统中,我们选择了以下几种数据结构:1.数组:数组适用于存储固定大小的数据集合,可以用来存储产品信息和用户信息等;2.链表:链表适用于存储动态大小的数据集合,可以用来存储产品分类信息和产品的记录;3.栈:栈适用于实现后进先出(LIFO)的数据操作,可以用来实现用户登录功能;4.队列:队列适用于实现先进先出(FIFO)的数据操作,可以用来实现产品的进销存管理。
3. 功能模块实现3.1 登录模块实现登录模块需要实现用户登录和认证功能。
我们可以使用栈这种数据结构来管理用户登录信息。
当用户登录时,将用户名和密码入栈,并将栈顶元素与数据库中的用户信息进行验证。
如果验证通过,用户可以继续使用系统;否则,系统将提示用户重新输入。
3.2 库存管理模块实现库存管理模块需要实现库存的增加、删除、修改和查询功能。
我们可以使用数组来存储产品的信息,使用链表来存储产品的记录。
数据结构课程设计通讯录管理系统

数据结构课程设计通讯录管理系统一、系统需求分析通讯录管理系统的主要目标是提供一个方便、高效的方式来管理联系人信息。
具体需求包括:1、能够添加联系人,包括姓名、电话号码、电子邮件、地址等基本信息。
2、可以对联系人信息进行修改和删除操作。
3、支持按照姓名、电话号码等关键字进行快速查找。
4、能够以列表形式展示所有联系人的信息。
二、数据结构选择为了实现上述功能,我们需要选择合适的数据结构来存储联系人信息。
考虑到联系人信息的多样性和动态性,链表是一个不错的选择。
链表可以方便地进行插入、删除和修改操作,并且能够灵活地调整存储空间。
另外,为了提高查找效率,我们可以结合使用哈希表。
通过将联系人的关键信息(如姓名或电话号码)进行哈希运算,快速定位到对应的联系人节点。
三、系统功能实现1、添加联系人功能当用户选择添加联系人时,系统会提示用户输入联系人的各项信息。
这些信息被封装成一个结构体,并通过链表的插入操作添加到链表中。
同时,将关键信息映射到哈希表中,以便后续快速查找。
2、修改联系人功能用户输入要修改的联系人的关键字,系统通过哈希表快速找到对应的联系人节点。
然后,提示用户输入修改后的信息,并更新链表和哈希表中的数据。
3、删除联系人功能与修改功能类似,通过关键字找到联系人节点,从链表和哈希表中删除相应的节点和信息。
4、查找联系人功能用户输入查找关键字,系统通过哈希表进行快速定位,如果找到匹配的联系人,则显示其详细信息。
5、展示所有联系人功能遍历链表,将所有联系人的信息以列表形式输出到屏幕上。
四、系统界面设计为了提高用户体验,系统设计了简洁直观的界面。
主界面提供了添加、修改、删除、查找和展示所有联系人等功能选项。
用户通过选择相应的选项,进入对应的操作流程。
五、代码实现示例以下是部分关键代码的示例:```c//联系人结构体typedef struct Contact {char name50;char phoneNumber20;char email50;char address100;struct Contact next;} Contact;//哈希表节点结构体typedef struct HashNode {char key50;Contact contact;struct HashNode next;} HashNode;//链表插入联系人void insertContact(Contact head, Contact newContact) {newContact>next = head;head = newContact;}//哈希函数unsigned int hashFunction(const char key) {unsigned int hash = 0;while (key) {hash =(hash << 5) + key++;}return hash % HASH_TABLE_SIZE;}//查找联系人Contact findContact(Contact head, const char key, HashNode hashTable) {unsigned int hashValue = hashFunction(key);HashNode node = hashTablehashValue;while (node) {if (strcmp(node>key, key) == 0) {return node>contact;}node = node>next;}Contact current = head;while (current) {if (strcmp(current>name, key) == 0 ||strcmp(current>phoneNumber, key) == 0) {//更新哈希表HashNode newNode =(HashNode )malloc(sizeof(HashNode));strcpy(newNode>key, key);newNode>contact = current;newNode>next = hashTablehashValue;hashTablehashValue = newNode;return current;}current = current>next;}return NULL;}```六、系统测试在完成系统的开发后,需要进行全面的测试以确保系统的稳定性和可靠性。
《数据结构》课程设计报告

《数据结构》课程设计报告一、课程目标《数据结构》课程旨在帮助学生掌握计算机科学中数据结构的基本概念、原理及实现方法,培养其运用数据结构解决实际问题的能力。
本课程目标如下:1. 知识目标:(1)理解数据结构的基本概念,包括线性表、栈、队列、串、数组、树、图等;(2)掌握各类数据结构的存储表示和实现方法;(3)了解常见算法的时间复杂度和空间复杂度分析;(4)掌握排序和查找算法的基本原理和实现。
2. 技能目标:(1)能够运用所学数据结构解决实际问题,如实现字符串匹配、图的遍历等;(2)具备分析算法性能的能力,能够根据实际问题选择合适的算法和数据结构;(3)具备一定的编程能力,能够用编程语言实现各类数据结构和算法。
3. 情感态度价值观目标:(1)培养学生对计算机科学的兴趣,激发其探索精神;(2)培养学生团队合作意识,提高沟通与协作能力;(3)培养学生面对问题勇于挑战、善于分析、解决问题的能力;(4)引导学生认识到数据结构在计算机科学中的重要地位,激发其学习后续课程的兴趣。
本课程针对高年级学生,课程性质为专业核心课。
结合学生特点,课程目标注重理论与实践相结合,强调培养学生的实际操作能力和解决问题的能力。
在教学过程中,教师需关注学生的个体差异,因材施教,确保课程目标的达成。
通过本课程的学习,学生将具备扎实的数据结构基础,为后续相关课程学习和职业发展奠定基础。
二、教学内容根据课程目标,教学内容主要包括以下几部分:1. 数据结构基本概念:线性表、栈、队列、串、数组、树、图等;教学大纲:第1章 数据结构概述,第2章 线性表,第3章 栈和队列,第4章 串。
2. 数据结构的存储表示和实现方法:教学大纲:第5章 数组和广义表,第6章 树和二叉树,第7章 图。
3. 常见算法的时间复杂度和空间复杂度分析:教学大纲:第8章 算法分析基础。
4. 排序和查找算法:教学大纲:第9章 排序,第10章 查找。
教学内容安排和进度如下:1. 第1-4章,共计12课时,了解基本概念,学会使用线性表、栈、队列等解决简单问题;2. 第5-7章,共计18课时,学习数据结构的存储表示和实现方法,掌握树、图等复杂结构;3. 第8章,共计6课时,学习算法分析基础,能对常见算法进行时间复杂度和空间复杂度分析;4. 第9-10章,共计12课时,学习排序和查找算法,掌握各类算法的实现和应用。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据布局课程设计陈述目录第一章设计目的 (3)第二章设计任务及要求 (3)一、根本要求 (3)二、内容 (3)第三章标题问题阐发与解答 (4)一、仓库办理系统 (4)1.标题问题要求 (4)2.应用程序功能 (4)3.输入数据类型、格式和内容限制 (6)4.主要模块的算法描述 (6)5.源程序代码 (7)二、通讯录办理系统 (13)1.标题问题要求 (13)2.应用程序功能 (13)3.输入数据类型、格式和内容限制 (15)4.主要算法模块描述 (16)5.源程序代码 (16)三、猴子选大王 (22)1.标题问题要求: (22)2.应用程序功能 (22)3.输入数据类型、格式和内容限制 (23)4.主要算法模块描述 (23)5.源程序代码 (23)四、二叉树运算2 (26)1.标题问题要求 (26)2.应用程序功能 (26)3.输入数据类型、格式和内容限制 (26)4.主要算法模块描述 (26)5.源程序代码 (28)第一章设计目的一、培养学生运用算法与数据布局的根本常识解决实际编程中的数据布局设计和算法设计问题。
二、培养学生独立设计程序与解决问题的能力,培养学生团队协作集成程序模块及调试能力。
三、培养学生初步的软件设计及软件测试的能力。
第二章设计任务及要求一、根本要求学生必需仔细阅读《数据布局》课程设计指导书,当真主动完成课设的要求。
有问题及时主动通过各种方式与教师联系沟通。
学生要阐扬自主学习的能力,充实操纵时间,安排好课设的时间方案,并在课设过程中不竭检测本身的方案完成情况,及时的向教师陈述请示。
课程设计按照教学要求需要一周时间完成,一周中每天〔按每周5天〕至少要上3-4小时的机来调试C语言设计的程序,总共至少要上机调试程序15小时。
按照设计陈述要求编写设计陈述,主要内容包罗目的、意义、道理和实现方法简介、过程阐发及说明、尝试成果情况说明、结论。
每个人必需有可运行的程序,学生能对本身的程序面对教师提问并能熟练地解释清楚,学生答复的问题和程序运行的成果作为评分的主要衡量尺度。
二、内容本次课程设计完成如下模块:仓库办理系统、通讯录办理系统、猴子选大王及二叉树运算2。
第三章标题问题阐发与解答一、仓库办理系统1.标题问题要求设计一个仓库办理系统,可以按照挨次和货物名称查询仓库的存储情也可以增加或删除货物。
struct node{char NO; //商品编号char name[max]; //商品名称char count; //商品数量};2.应用程序功能开始运行时界面如下:仓库办理链表成立界面如下:仓库办理链表插入界面如下:仓库办理链表查询界面如下:按商品编号查询界面如下:按商品名称查询界面如下:仓库办理链表删除界面如下:仓库办理链表输出界面如下:3.输入数据类型、格式和内容限制输入数据类型为字符型,但在输入过程中不成呈现空格,如在输入商品名称时不成呈现空格。
4.主要模块的算法描述流程图:5.源程序代码#include<stdio.h>#include"iostream"int flag1=0;#include "string.h"#include "stdlib.h"#include "windows.h"using namespace std;typedef struct { //仓库办理结点类型char NO[10]; //商品编号char name[30]; //商品名称char count[5]; //商品数量} DataType;typedef struct node { //结点类型定义DataType data; //结点数据域struct node *next; //结点指针域} ListNode;typedef ListNode *LinkList;LinkList head;ListNode *p;LinkList CreateList(void);void InsertNode(LinkList head,ListNode *p);ListNode *ListFind(LinkList head);void DelNode(LinkList head);void PrintList(LinkList head);/*******尾插法成立带头结点的仓库办理链表算法*******/LinkList CreateList(void){LinkList head=(ListNode *)malloc(sizeof(ListNode)); //申请头结点ListNode *p,*rear;char flag='y'; //int flag=0; //结束标记置0rear=head; //尾指针初始指向头结点while (flag=='y'){p=(ListNode *)malloc(sizeof(ListNode)); //申新结点printf(" 商品编号(10) 商品名称(30) 商品数量(5) \n");printf("-----------------------------------------------\n");printf("\n添加商品编号:\n");cin>>p->data.NO;printf("\n添加商品名称:\n");cin>>p->;printf("\n添加商品数量:\n");cin>>p->data.count;rear->next=p; //新结点连接到尾结点之后rear=p; //尾指针指向新结点printf("继续添加记录(y/n):");cin>>flag;}rear->next=NULL; //终端结点指针置空return head; //返回链表头指针}/*********在仓库办理链表head中插入结点************/void InsertNode(LinkList head,ListNode *p){ListNode *p1,*p2;p1=head;p2=p1->next;while(p2!=NULL && strcmp(p2->data.NO,p->data.NO)<0){p1=p2; //p1指向刚拜候过的结点p2=p2->next; //p2指向表的下一个结点}p1->next=p; //插入p所指向的结点p->next=p2; //连接表中残剩的结点}/**********有序仓库办理链表的查找****************/ListNode *ListFind(LinkList head){ListNode *p;char num[10];char name[9];char pp;printf("==================\n");printf(" a. 按商品编号查询\n");printf(" b. 按商品名称查询\n");printf("==================\n");printf(" 请选择:");p=head->next;cin>>pp;getchar();if (pp=='a'||pp=='A'){printf("请输入要查找的商品编号:");cin>>num;while (p&&strcmp(p->data.NO,num)<0) p=p->next;if ((p==NULL)||strcmp(p->data.NO,num)>0) p=NULL; //没有查到要查找的通讯信息}elseif (pp=='b'||pp=='B'){printf(" 请输入要查找的商品名称:");cin>>name;while(p&&strcmp(p->,name)!=0) p=p->next;}return p;}/********仓库办理链表上的结点删除*****************/void DelNode(LinkList head){char jx;ListNode *p,*q;p=ListFind(head); //调用查找函数if (p==NULL){printf("没有查到要删除的商品信息!\n");return;}if(p!=NULL) printf("真的要删除该商品吗?〔y/n〕:");cin>>jx;if (jx=='y'||jx=='Y'){q=head;while ((q!=NULL)&&(q->next!=p)) q=q->next;q->next=p->next; //删除结点free(p); //释放被删结点空间printf("删除成功!\n");}}/********仓库办理链表的输出函数**********/void PrintList(LinkList head){ListNode *p;p=head->next;printf(" 商品编号商品名称商品数量\n");printf("--------------------------------------------------------------------------------\n");while (p!=NULL){printf("%15s%20s%23s\n",p->data.NO,p->,p->data.count);printf("---------------------------------------------------------------------------------\n");p=p->next; //后移一个结点}}void main(){int choice,j=1;char Choice;while(j){printf("\n\n\n\n\n");printf("\t\t\t\t仓库办理系统\n");printf("\n\t\t\t******************************");printf("\n\t\t\t* 1--- 仓库办理链表成立*");printf("\n\t\t\t* 2--- 仓库办理链表插入*");printf("\n\t\t\t* 3--- 仓库办理链表查询*");printf("\n\t\t\t* 4--- 仓库办理链表删除*");printf("\n\t\t\t* 5--- 仓库办理链表输出*");printf("\n\t\t\t* 0--- 退出仓库办理系统*");printf("\n\t\t\t******************************");printf("\n\t\t\t请选择菜单号(0--5):");cin>>choice;getchar();switch(choice){case 1:{printf("**********************************\n");printf("* 仓库办理链表成立*\n");printf("**********************************\n");head=CreateList( );flag1=1;system("cls");break;}case 2:{if(flag1!=1) {printf("请先成立表!"); Sleep(1500);}printf("**********************************\n");printf("* 仓库办理链表插入*\n");printf("**********************************\n");printf("商品编号(10) 商品名称(30) 商品数量\n");printf("************************************* \n");p=(ListNode *)malloc(sizeof(ListNode)); //申请新结点printf("\n添加商品编号:\n");cin>>p->data.NO;printf("\n添加商品名称:\n");cin>>p->;printf("\n添加商品数量:\n");cin>>p->data.count;InsertNode(head,p);system("cls");break;}case 3:{if(flag1!=1) {printf("请先成立表!"); Sleep(1500);}else{printf("***********************************\n");printf("* 仓库办理链表查询*\n");printf("***********************************\n");p=ListFind(head);if (p!=NULL){printf("商品编号商品名称商品数量\n");printf("--------------------------------------------------\n");printf("%s,%s,%s\n",p->data.NO,p->,p->data.count);printf("---------------------------------------------------\n");}else printf("没有查到要查询的商品信息!\n");}break;}case 4:{if(flag1!=1) {printf("请先成立表!"); Sleep(1500);}else{printf("***********************************\n");printf("* 仓库办理链表删除*\n");printf("***********************************\n");DelNode(head); //删除结点}break;}case 5:{if(flag1!=1) {printf("请先成立表!"); Sleep(1500);}else{printf("************************************\n");printf("* 仓库办理链表输出*\n");printf("************************************\n");PrintList(head);}break;}case 0:j=0;system("cls");break;default:printf("\t\t\n 输入有错,请从头输入!\n");Sleep(1500);system("cls");break;}}}二、通讯录办理系统1.标题问题要求通讯录一般包罗通讯者的编号、姓名、性别、及地址等信息,设计一个通讯录要求实现通讯者的插入、查询、删除、更新、排序操作。