版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据结构课程设计报告数据结构课程设计报告(2012——2013年度第一学期)课程名称:数据结构课程设计题目一:2.2学生通讯录管理系统题目二:城市链表院系:计算机科学系班级:10级软件本(一)姓名:学号:指导教师:成绩:2012年代日1数据结构课程设计报告成绩评定一、指导教师考语二、成绩成绩备注指导教师:日期:年代日2数据结构课程设计报告设计题目<一>:2.2学生通讯录管理系统一、设计要求1.问题描述纸质的通讯录系统已经不能够满足大家的要求,简单扔掉、查找困难等问题是纸质通讯录所不能够战胜的缺点。“学生通讯管理系统”是为了帮助老师、同学,也许其他一些需要使用通讯录的人员进行管理和解析的一种应用程序。2.需求解析输入数据建立通讯录盘问通讯录系统中满足要求的信息插入新的通讯录信息删除不需要的通讯录信息查察所有通讯录信息二、大纲设计为了实现需求解析的功能,能够从三个方面着手设计。1.主界面设计为了实现学生通讯录管理系统各功能的管理,设计一个含有多个菜单项的主控菜单据程序以链接系统的各项子功能,方便用户使用本系统。本系统主控菜单运行界面如图2-3所示。图2-3“学生通讯录管理系统”主菜单2.储藏结构设计本系统主要采用链表结构种类来表示储藏在“学生通讯录管理系统”中的信息。其中,链表结点由四个重量构成:通讯录成员学号、通讯录成员姓名、通讯录成员电话号码、指向该结构体的指针。其他,本系统还设置了一个全局变量seat,表示通讯录中成员的序号。3数据结构课程设计报告3.系统功能设计本系统设置了5个子功能菜单,5个子功能的设计描述以下。(1)建立通讯录系统。能够一次输入多个成员通讯录的信息,建立通讯录。该功能由creatIncreLink()函数实现。2)插入通讯记录。每次能够插入一个成员通讯录的信息。若是要连续插入多个成员通讯录信息必定多次选择该功能。该功能有insertYouXu()函数实现。3)盘问通讯记录。能够按两种方式盘问所需要的通讯录成员记录,一是按学号盘问,二是按姓名盘问。分别由seartNum()和seartName()函数实现。4)删除通讯记录。能够对通讯录中不再需要的信息进行删除。有三种删除方式:挨次号进行删除,按学号进行删除和按姓名进行删除。分别由deleteElem()函数,delNum()函数和delName()函数实现。(5)显示通讯录系统。能够查察通讯录中所有的通讯录成员记录。该功能由printList()函数实现。三、模块设计1.模块设计本程序包括两个模块:主程序模块和链表操作模块。其调用关系如图2-4所示。主程序模块链表操作模块图2-4模块调用表示图2.系统子程序及功能设计本系统共设置10个子程序,各程序的函数名及功能说明以下,其中大部分函数都是链表的基本操作函数。(1)LinkListcreatIncreLink()//链表的创办(2)deleteElem(LinkListL,inti)//从通讯录中挨次号删除第i个元素(3)delName(LinkListL,charn[])//按姓名删除通讯录记录(4)delNum(LinkListL,intn)//按学号删除通讯录记录(5)voidinsertYouXu(LinkListL,LinkListElem)//插入一条通讯录(6)printList(LinkListL)//打印指针地址为L的通讯录(7)prior(LinkListL,LinkListp)//查找位于当前地址元素的前一元素的地址4数据结构课程设计报告(8)searchName(LinkListL,intn)//按姓名查找通讯录记录(9)intsearchNum(LinkListL,intn)//按学号查找查找通讯录记录(10)voidmain()//主函数。设定界面的颜色和大小,调用链表操作模块3.函数主要调用关系图本系统10个子程序之间的主要调用关系如图2-5所示。图中数字是各函数的编号。图2-5系统函数调用关系图以下所示:四、详细设计1.数据种类定义本系统采用链式结构储藏通讯录结点。结点定义以下:typedefstructLNode{intnumber;doubletelenum;charname[20];structLNode*next;}LNode,*Linklist;2.系统主要子程序详细设计(1)建立链表的函数,主要用来建立通讯录。LinklistcreateIncreLink(){//创办一个存放通讯录成员的非递减有序表,返回头结点地址LinklistL=(Linklist)malloc(LEN);L->next=NULL;5数据结构课程设计报告Linklistp;intnum=1,number;doubletelenum;charname[20];printf("请输入学生学号、姓名和电话号码,建立通讯录,以'-1'为输入结束标志\n");printf("请输入学号%d:",num);scanf("%d",&number);printf("请输入姓名%d:",num);chartemp=getchar();gets(name);printf("请输入电话号码%d:",num);scanf("%1f",&telenum);while(number>=0){p=(Linklist)malloc(LEN);p->number=number;p->telenum=telenum;strcpy(p->name,name);insertYouXu(L,P);num++;printf("请输入学号%d:",num);scanf("%d",&number);printf("请输入姓名%d:",num);temp=getchar();gets(name);printf("请输入电话号码%d:",num);scanf("%1f",&telenum);}return(L);}(2)显示链表中所有结点的信息,用查察通讯录所有的记录。6数据结构课程设计报告voidprintList(LinkListL){//打印头结点地址为L的通讯录printf("\n----------------\n");printf("学号姓名电话号码\n");printf("----------------\n");LinkListp=L;intn=1;if(L==NULL||L->next==NULL)printf("该通讯录中没有元素\n");//判断通讯录可否为空elsewhile(p->next!=NULL){printf("%2d%-9d",n,p->next->number);printf("%-5s%.0f\n",p->next->name,p->next->telenum);p=p->next;n++;}printf("--------------------\n");return;}五、测试解析系统运行主界面如图2-3所示。各子功能测试运行结果以下。通讯录的建立在主菜单下,用户输入1并回车,尔后依照提示建立通讯录,分别输入通讯录成员的学号,姓名,电话号码,运行结果如图2-6所示。7数据结构课程设计报告图2-6通讯录的建立插入通讯录记录在主菜单下,用户输入2并回车,能够插入一个新的通讯录成员的信息,依次输入学号,姓名和电话号码,运行结果如图2-7所示。图2-7插入通讯录3.盘问通讯录记录在主菜单下,用户输入3并回车,能够依照两种方式盘问通讯录。一种是按学号盘问,另一种方式是按姓名盘问。可依照提示操作,运行结果如图2-8所示。8数据结构课程设计报告图2-8盘问通讯记录删除通讯录记录在主菜单下,用户输入4并回车,进行通讯录记录的删除。能够按三种方式进行删除操作:挨次号、按学号和按姓名。图2-9是按学号删除的运行结果。图2-9删除通讯记录显示通讯录信息在主菜单下,用户输入5并回车,能够查察通讯录中的所有成员信息。运行结果如图2-10所示。9数据结构课程设计报告图2-10显示通讯录信息六、用户手册1)本程序执行文件为“学生通讯录管理系统.exe”。2)进入本系统此后,随即显示系统主菜单界面,用户可在该界面下输入各子菜单前对应的数字并按回车键,执行相应子菜单命令。3)本系统没有供应直接更正通讯录信息的功能,可经过删除和插入操作完成更正功能。七、调试报告调试过程中insertYouXucreateIncreLink未声明变量。此后把对函数定义提到程序初始定义。发现直接将数值在调用的函数里定义、输入、输出,防备在主函数里传输数据,其这样就不易出现错误。查找算法,运行结果由于字母出错出现死循环。经过此次课程设计使自己深刻认识到自己的不足。对线性表的插入、删除、查找等算法的实现有了更深一步的理解,受益多多。八、程序清单#include<stdio.h>#include<stdlib.h>#include<string.h>#defineNULL0#defineLENsizeof(LNode)intseat;//通讯录成员的序号typedefstructLNode{//用于通讯录结点intnumber;doubletelenum;charname[20];10数据结构课程设计报告structLNode*next;}LNode,*LinkList;//1.创办链表voidinsertYouXu(LNode*pn,LinkListp);LinkListcreateIncreLink(){//创办一个存放通讯录成员的非递减有序表,返回头结点地址LinkListL=(LinkList)malloc(LEN);//头结点L->next=NULL;LinkListp;intnum=1,number;doubletelenum;charname[20];printf("请输入学生学号、姓名和电话号码,建立通讯录,以'-1'为输入结束标志\n");printf("请输入学号%d:",num);scanf("%d",&number);printf("请输入姓名%d:",num);chartemp=getchar();gets(name);printf("请输入电话号码%d:",num);scanf("%1f",&telenum);while(number>=0){p=(LinkList)malloc(LEN);//新结点p->number=number;p->telenum=telenum;strcpy(p->name,name);insertYouXu(L,p);//有序地插入新结点num++;printf("请输入学号%d:",num);scanf("%d",&number);printf("请输入姓名%d:",num);11数据结构课程设计报告temp=getchar();gets(name);printf("请输入电话号码%d:",num);scanf("%1f",&telenum);}return(L);}//2.从通讯录中删除第i个元素voiddeleteElem(LinkListL,inti){LinkListp=L;intj=0;while(p->next&&j<i-1){p=p->next;j++;}if(!(p->next))//判断i可否合法,i不能够大于元素的个数,也不能够小于等于0{printf("第%d个元素删除失败\n",i);return;}LinkListq=p->next;p->next=q->next;free(q);//释放删除的结点}//3.按姓名删除通讯者intdelName(LinkListL,charn[]){intflag=0;//判断要删除的通讯者和通讯录中的姓名可否般配LinkListp=L->next;seat=1;if(L->next==NULL)printf("该链表中没有元素,查找失败\n");12数据结构课程设计报告else{while(p!=NULL){if(!strcmp(p->name,n))//比较输入的姓名和通讯录中的姓名{flag=1;//输入姓名般配printf("%s",p->name);p=p->next;deleteElem(L,seat);}else{p=p->next;seat++;}//输入姓名不般配,指针移到下一个通讯者}if(flag)printf("被删除\n");}returnflag;}//4.按学号删除通讯录intdelNum(LinkListL,intn){intflag=0;//判断要删除的通讯者LinkListp=L->next;seat=1;if(L->next==NULL)printf("该链表中没有元素,删除失败\n");else{while(p!=NULL){if(p->number<=n){13数据结构课程设计报告if(p->number==n){flag=1;//输入学号般配printf("%d",p->number);p=p->next;deleteElem(L,seat);}}else{p=p->next;seat++;}}printf("被删除\n");}returnflag;}//6.打印头结点地址为L的通讯录voidprintList(LinkListL){//打印头结点地址为L的通讯录printf("\n----------------\n");printf("学号姓名电话号码\n");printf("----------------\n");LinkListp=L;intn=1;if(L==NULL||L->next==NULL)printf("该通讯录中没有元素\n");//判断通讯录可否为空elsewhile(p->next!=NULL){printf("%2d%-9d",n,p->next->number);printf("%-5s%.0f\n",p->next->name,p->next->telenum);p=p->next;n++;14数据结构课程设计报告}printf("--------------------\n");return;}//7.找到位于当前地址元素的前一个元素的地址LinkListprior(LinkListL,LinkListp){if(L->next==NULL)return(L);LinkListp_prior=L;while(p_prior->next!=p)p_prior=p_prior->next;return(p_prior);}//8.按姓名查找通讯者intsearchName(LinkListL,charn[]){intflag=0;//标志要查找的通讯者和通讯录中的姓名可否般配LinkListp=L->next;seat=1;if(L->next==NULL||L==NULL)printf("该通讯录中没有元素,查找失败\n");else{while(p!=NULL){if(!strcmp(p->name,n))//比较要查找的姓名可否和当前通讯录所指姓名般配{flag=1;//输入姓名般配printf("要查找的是第%d位通讯者:\n",seat);printf("Number:%dName:%sTeleNo.:%.of\n",p->number,15数据结构课程设计报告p->name,p->telenum);}p=p->next;seat++;//!!!!!}}returnflag;}//9.按学号查找通讯者intsearchNum(LinkListL,intn){intflag=0;//标志要查找的通讯者和通讯录中的学号可否匹配LinkListp=L->next;seat=1;if(L->next==NULL)printf("该链表中没有元素,查找失败\n");else{while(p!=NULL){if(p->number<=n)if(p->number==n){flag=1;//输入学号般配printf("要查找的是第%d位通讯者:\n",seat);printf("学号:%d姓名:%s电话号码.:%.of\n",p->number,p->name,p->telenum);}p=p->next;seat++;}}returnflag;16数据结构课程设计报告}//10.主函数。设定界面的颜色大小,调用工作区模块函数voidmain(){system("color1f");//设置界面颜色LinkListL=NULL;printf("\n*****************^@^欢迎使用通讯录系统***********\n");printf("*1通讯录的建立*\n");printf("*2插入通讯记录*\n");printf("*3盘问通讯记录*\n");printf("*4删除通讯记录*\n");printf("*5显示通讯记录信息*\n");printf("*0退出管理系统*\n");printf("\n*****************^@^欢迎使用通讯录系统***********\n");intflag=0;//通讯录可否建立intmenu;//菜单项选择项printf("请选择0-5:");printf("%d",&menu);while(menu!=0){switch(menu)//用于调用菜单的语句{case1:{L=creatIncreLink();//调用函数实现通讯录的建立printf("建立通讯录:");printList(L);flag=1;break;}case2:{17数据结构课程设计报告if(flag==1){intnumber,telenum;charname[20];printf("请输入通讯者的学号和姓名:\n");printf("请输入学号:");scanf("%d,&number");printf("请输入姓名:");chartemp=getchar();gets(name);printf("请输入电话号码:");scanf("%d",&telenum);LinkListp=(LinkList)malloc(LEN);//新结点p->number=number;strcpy(p->name,name);p->telenum=telenum;insertYouXu(L,p);//有序的插入新结点printf("插入后:");printfList(L);}elseprintf("\nERROR:通讯录还没有建立,请先建立通讯录\n");break;}case3:{intway,n,s;//查找方式charna[20];if(L!=NULL){if(flag)//通讯录已建立{18数据结构课程设计报告printf("选择查找方式:\n");printf("1.按学号2.按姓名");scanf("%d",&way);if(way==1){printf("\n请输入学号:");scanf("%d",&n);s=searchNum(L,n);//查找通讯录成员if(s==0)printf("无此通讯者,查找失败!\n");}elseif(way==2){printf("\n请输入姓名:");chartemp=getchar();gets(na);s=searchName(L,na);if(s==0)printf("无此通讯者,查找失败!\n");}elseprintf("通讯录中无记录!\n");}break;}elseprintf("通讯录中无记录!\n");break;}case4:{intway;//删除方式printf("请选择删除方式:1.挨次号2.按学号3.按姓名\n");scanf("%d",&way);if(way==1)19数据结构课程设计报告{intn;printf("请输入通讯录序号:");scanf("%d",&n);printf("删除后:\n");deleteElem(L,n);//挨次号删除printfList(L);}elseif(way==2){intn,f;printf("请输入学号:");scanf("%d",&n);f=delNum(L,n);if(f!=0){printf("删除后:\n");printfList(L);}elseprintf("无该学号,删除失败!\n");}elseif(way==3);{charna[20];intf;printf("请输入姓名:");chartemp=getchar();f=delName(L,na);if(f!=0){printf("删除后:\n");printfList(L);}elseprintf("无该学号,删除失败!\n");}elseprintf("ERROR!!\n");20数据结构课程设计报告break;}case5:{printf("当前通讯录记录内容以下:\n");printfList(L);break;}case0:exit(0);default:printf("\n没有此功能,重新输入\n");}printf("选择功能:");scanf("%d",&menu);}}21数据结构课程设计报告设计题目<二>:城市链表一、设计要求1.问题描述将各个城市的信息存入一个带头结点的单链表。结点中的城市信息包括城市名、地址坐标。要求能够利用城市名和地址坐标进行有关查找、插入、删除更新等操作。2.需求解析1)输入城市信息,建立城市链表2)依照城市名也许地址对城市进行查找3)向城市链表中加入新的城市4)依照城市名或地址删除城市链表中的城市5)更新城市链表中城市的信息6)找寻离某点距离为d的城市,并输出它的信息7)查察城市链表中所以城市的信息二、大纲设计1.主界面设计为了实现城市链表的各种功能,为了方便用户使用本系统。本系统主控菜单运行界面如图2-1所示。22数据结构课程设计报告图2-1“城市链表”主菜单2.储藏结构设计本系统采用带头节点的链表结构来储蓄“城市链表”中的信息。链表节点有4个成员:城市名、城市的横坐标、城市的纵坐标,指向该结构体的指针。3.系统功能设计本系统设置了9个子功能菜单,9个子功能的设计描述以下。(1)建立城市链表。由函数creatLink()实现,该功能实现城市结点的输入以及连接。能够初始化链表,输入城市名“end”时表示建立结束。(3)插入链表记录。由函数insert()实现。该功能实现按坐标由小到大的序次将结点插入到链表中。(4)盘问链表记录。由searchName()函数和searchPos()函数实现。其中searchName()实现依照城市名盘问的操作,searchPos()实现依照城市坐标盘问的操作。(5)删除链表记录。由delName()函数和delPos()函数实现。其中delName的操作。(6)显示链表记录。由printList()函数实现。该功能实现格式化的链表23数据结构课程设计报告输出操作,能够显示更正后的链表状态。(7)更新链表信息。由update()函数实现。该功能实现依照城市名更新城市的坐标信息。(8)输出链表。由函数PrintLn()来实现。输出链表里所有城市的信息。(9)城市找寻。由函数Search()来实现。给定一个地址,找寻距离它d的城市,并输出他们的信息。三、模块设计1.模块设计本程序包括两个模块:主程序模块和链表操作模块。调用关系如图(2)所示。主程序模块链表操作模块图2-2模块调用表示图2.系统子程序及功能设计本系统共设置3个子程序,各程序的函数名及功能说明以下:(1)LinklistcreatLink()//创办一个城市链表,返回头结点地址(2)printList(LinklistL)//打印头结点地址为L的城市链表(3)intsearchName(LinklistL,charname[])//以城市名查找(4)intsearchPos(LinklistL,intpx,intpy)//以城市坐标查找(5)intinsert(LinklistL,Linklistcity)//插入(6)intdelName(LinklistL,charname[])//利用城市名称删除(7)intdelPos(LinklistL,intpx,intpy)//利用坐标删除(8)intupdate(LinklistL,charname[])//更新(9)intgetPos(LinklistL,charname[])//给定一个城市名,返回城市坐标(10)intgetCity(LinklistL,intpx,intpy,intd)//给定一个城市坐标P,返回距离小于等于d的城市(11)voidmain()//主函数,实现链表各项操作的选择3.函数主要调用关系图本系统3个子程序之间的主要调用关系如图2-3所示。图中数字是各函数的编号。24数据结构课程设计报告11main()1234567891022222四、详细设计1.数据种类定义(1)数据种类定义typedefstructLNode{//城市结点charname[20];intposx;//横坐标intposy;//纵坐标structLNode*next;}LNode,*Linklist;2.系统主要子程序详细设计(1)建立城市链表LinklistcreatLink()//创办一个城市链表,返回头结点地址{LinklistL=(Linklist)malloc(LEN);//头结点L->next=NULL;Linklistp;charname[20];intpx;intpy;25数据结构课程设计报告charend[4]="end";printf("请输入城市名称、横坐标和纵坐标,建立城市链表,以'end'为输入结束标志\n");printf("请输入城市名称:");scanf("%s",name);while(strcmp(name,end)){printf("请输入横坐标x:");scanf("%d",&px);printf("请输入纵坐标y:");scanf("%d",&py);p=(Linklist)malloc(LEN);//新结点strcpy(p->name,name);p->posx=px;p->posy=py;insert(L,p);//插入新结点printf("请输入城市名称:");scanf("%s",name);}return(L);}(2)插入链表记录intinsert(LinklistL,Linklistcity){//插入Linklistp=L->next;Linklistp_prior=L;while(p!=NULL&&city->posx>=p->posx){if(p->posx==city->posx&&p->posy==city->posy){printf("重复输入!\n");return0;}26数据结构课程设计报告p=p->next;}//确定city插入的地址while(p_prior->next!=p){p_prior=p_prior->next;}if(p==NULL){p=p_prior;city->next=NULL;p->next=city;}else//若为空表,插到头结点此后{p=p_prior;city->next=p->next;p->next=city;}return1;}按名称删链表记录intdelName(LinklistL,charname[20]){//利用城市名称删除intflag=0;intseat=1;Linklistp=L;if(p->next==NULL)printf("该链表中没有元素,删除失败\n");else{while(p->next!=NULL){27数据结构课程设计报告if(!strcmp(p->next->name,name)){flag=1;printf("城市%s被删除\n",name);Linklistq=p->next;p->next=q->next;free(q);}else{p=p->next;}}}returnflag;}五、测试解析系统运行主界面如图2-1所示。各子功能测试运行结果以下。城市链表建立主菜单下输入1并回车,依照提示输入链表信息,输入“end”结束建立。运行结果如图2-3所示。28数据结构课程设计报告图2-3城市链表的建立插入链表主菜单下输入2并回车,能够进行链表插入,运行结果如图2-4所示。图2-4插入链表29数据结构课程设计报告查找链表主菜单下输入3并回车能够查找链表,再依照提示选择按城市名查找还是城市地址坐标查找。运行结果如图2-5所示。图2-5查找链表删除链表主菜单下输入4并回车能够删除链表。运行结果如图2-6所示30数据结构课程设计报告图2-6删除链表显示当前链表记录主菜单下输入5并回车能够显示当前链表。运行结果如图2-7所示。图2-7当前链表显示更新链表记录主菜单下输入6并回车能够更新链表记录。运行结果如图2-8所示图2-8链表更新记录返回城市坐标志录主菜单下输入7并回车能够显示当前链表。运行结果如图2-9所示31数据结构课程设计报告图2-9返回链表记录8.查察当前坐标p小于等于d的城市主菜单下输入8并回车能够查察坐标p小于等于d的城市。运行结果如图2-10所示六、用户手册1)本程序执行文件为“城市链表.exe”。2)进入本系统后,能够选择菜单功能项,第一选择功能1建立城市链表的基本数据后方可进行2-8的功能。3)在盘问和删除链表记录中,均能够依照需要依照两种方式执行链表操作,一种是依照城市的名称,一种则是依照城市的坐标实现。七、调试报告while后多出分号以致查找链表时出现死循环,经过此次的编写调试,认真和耐心是最最重要的,而对于线性表的每一个功能都需屡次测试。由于自己能力不够,对从前所学的数据结构与算法有所忘掉,在编写程序中对算法的理解有点费力,最后重新预习下课本,最后完成该链表,对链表的插入、删除,查找等算法的操作有了更深的认识与理解。受益匪浅。若是有n个城市结点,时间复杂度为0(n)。八、程序清单#include<stdio.h>#include<stdlib.h>#include<string.h>#include<math.h>#defineLENsizeof(LNode)typedefstructLNode{charname[20];intposx;//横坐标32数据结构课程设计报告intposy;//纵坐标structLNode*next;}LNode,*Linklist;用于城市结点intinsert(LinklistL,Linklistcity);LinklistcreatLink()//创办一个城市链表,返回头结点地址{LinklistL=(Linklist)malloc(LEN);//头结点L->next=NULL;Linklistp;charname[20];intpx;intpy;charend[4]="end";printf("请输入城市名称、横坐标和纵坐标,建立城市链表,以'end'为输入结束标志\n");printf("请输入城市名称:");scanf("%s",name);while(strcmp(name,end)){printf("请输入横坐标x:");scanf("%d",&px);printf("请输入纵坐标y:");scanf("%d",&py);p=(Linklist)malloc(LEN);//新结点strcpy(p->name,name);p->posx=px;p->posy=py;insert(L,p);//插入新结点printf("请输入城市名称:");scanf("%s",name);33数据结构课程设计报告}return(L);}voidprintList(LinklistL){//打印头结点地址为L的城市链表printf("\n------------------------\n");printf("城市\t坐标\n");printf("-------------------------\n");Linklistp=L->next;intn=1;if(L->next==NULL)printf("该链表中没有元素\n");elsewhile(p!=NULL){printf("%s",p->name);printf("\t(%d,%d)\n",p->posx,p->posy);p=p->next;}printf("-------------------------\n");return;}intsearchName(LinklistL,charname[20]){//以城市名查找intflag=0;Linklistp=L->next;if(L->next==NULL)printf("该链表中没有元素,查找失败\n");else{while(p!=NULL){if(!strcmp(p->name,name)){flag=1;34数据结构课程设计报告printf("您要查找的是%s城市\n",p->name);printf("该城市坐标为(%d,%d)\n",p->posx,p->posy);}p=p->next;}}returnflag;}intsearchPos(LinklistL,intpx,intpy){//以城市坐标查找intflag=0;Linklistp=L->next;if(L->next==NULL)printf("该链表中没有元素,查找失败\n");else{while(p!=NULL){if(p->posx==px&&p->posy==py){flag=1;printf("您要查找城市坐标为(%d,%d)\n",p->posx,p->posy);printf("该城市是%s\n",p->name);}p=p->next;}}returnflag;}intinsert(LinklistL,Linklistcity){//插入Linklistp=L->next;Linklistp_prior=L;35数据结构课程设计报告while(p!=NULL&&city->posx>=p->posx){if(p->posx==city->posx&&p->posy==city->posy){printf("重复输入!\n");return0;}p=p->next;}//确定city插入的地址while(p_prior->next!=p){p_prior=p_prior->next;}if(p==NULL){p=p_prior;city->next=NULL;p->next=city;}else//若为空表,插到头结点此后{p=p_prior;city->next=p->next;p->next=city;}return1;}intdelName(LinklistL,charname[20]){//利用城市名称删除intflag=0;intseat=1;Linklistp=L;36数据结构课程设计报告if(p->next==NULL)printf("该链表中没有元素,删除失败\n");else{while(p->next!=NULL){if(!strcmp(p->next->name,name)){flag=1;printf("城市%s被删除\n",name);Linklistq=p->next;p->next=q->next;free(q);}else{p=p->next;}}}returnflag;}intdelPos(LinklistL,intpx,intpy){//利用坐标删除intflag=0;Linklistp=L;if(p->next==NULL)printf("该链表中没有元素,删除失败\n");else{while(p->next!=NULL){if(p->next->posx==px&&p->next->posy==py){37数据结构课程设计报告Linklistq=p->next;p->next=q->next;free(q);flag=1;printf("坐标为(%d,%d)的城市被删除\n",px,py);}else{p=p->next;}}}returnflag;}intupdate(LinklistL,charname[20]){//更新intflag=0;Linklistp=L->next;if(L->next==NULL||L==NULL)printf("该链表中没有元素,更新失败\n");else{while(p!=NULL){if(!strcmp(p->name,name)){flag=1;printf("您要更新的是%s城市\n",p->name);printf("请输入横坐标x:");scanf("%d",&p->posx);printf("请输入纵坐标y:");scanf("%d",&p->posy);}p=p->next;}}38数据结构课程设计报告returnflag;}intgetPos(LinklistL,charname[20]){//给定一个城市名,返回城市坐标intflag=0;Linklistp=L->next;if(L->next==NULL||L==NULL)printf("该链表中没有元素,返回坐标失败\n");else{while(p!=NULL){if(!strcmp(p->name,name)){flag=1;printf("您要查察的是%s城市\n",p->name);printf("该城市坐标为:(%d,%d)\n",p->posx,p->posy);}p=p->next;}}returnflag;}intgetCity(LinklistL,intpx,intpy,intd){//给定一个城市坐标P,返回距离小于等于d的城市intflag=0;doubledistance;Linklistp=L->next;if(L->next==NULL||L==NULL)printf("该链表中没有元素,返回坐标失败\n");else{while(p!=NULL){39数据结构课程设计报告distance=sqrt((p->posx-px)^2+(p->posy-py)^2);if(distance<=d){flag=1;printf("该城市为:%s",p->name);}p=p->next;}}printf("\n");returnflag;}voidmain(){LinklistL=NULL;printf("\n**************欢迎使用城市链表系统***************\n");printf("*1建立城市链表*\n");printf("*2插入链表记录*\n");printf("*3盘问链表记录*\n");printf("*4删除链表记录*\n");printf("*5显示链表记录*\n");printf("*6更新链表信息*\n");printf("*7返回城市坐标*\n");printf("*8查察与坐标P距离小于等于D的城市*\n");printf("*9退出链表系统*\n");printf("*************欢迎使用城市链表系统****************\n");intmain_flag=0;intflag;40数据结构课程设计报告intmenu;printf("请选择1-9:");scanf("%d",&menu);while(menu){switch(menu){case1://建立城市链表{L=creatLink();printf("建立城市链表:");printList(L);main_flag=1;break;}case2://插入链表记录{if(main_flag==1){charname[20];intpx,py;printf("请输入城市名称:");scanf("%s",name);printf("请输入横坐标x:");scanf("%d",&px);printf("请输入纵坐标y:");scanf("%d",&py);Linkl
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广东省六校2026-2027学年高三上学期9月第一次联考数学试卷
- 2026卫生专业技术资格考试(慢性非传染性疾病控制)历年参考题库含答案详解
- 2026医师定期考核-内蒙古-内蒙古(普外科)医师定期考核历年参考题库含答案详解
- 2026初级内燃机车钳工-判断参考试题库历年考点答案详解
- 2026内蒙古自治区住院医师规范化培训结业理论考核(急诊科)历年参考题库含答案详解
- 2026全国大学英语四级考试(CET-4)历年参考题库含答案详解
- 2026住院医师规培-湖北-湖北住院医师规培(核医学科)历年参考题库含答案详解
- 2026住院医师规培-四川-四川住院医师规培(整形外科)历年参考题库含答案详解
- 2026二级造价工程师职业资格考试(建设工程计量与计价实务·安装工程)历年参考题库含答案详解
- 2026事业单位笔试-辽宁-辽宁普外科(医疗招聘)历年参考题库含答案详解
- 财政投资评审操作规程实务指南
- Unit 1 单词讲解2026-2027学年人教版九年级英语上册
- 柔性光伏电池介绍
- 2025平湖辅警考试试题
- ASME B16.10-2022 阀门结构长度(中英文参考版)
- 文学空间理论中的“阈限”概念应用-基于巴赫金“时空体”与列斐伏尔“空间生产”整合
- 2026年打印纸品供应合同协议
- 仓库安全生产责任制度
- 2025年大学《侦查学-犯罪现场勘查》考试备考试题及答案解析
- 雅马哈电钢琴P-115B中文说明书
- 2025-2026学年(人教版)初中数学八年级上册第一次月考(13-14章)(含答案)
评论
0/150
提交评论