数据结构课程设计实验1城市链表
城市链表实验报告书
学生课程实验报告书09级计算机科学与信息技术系网络工程专业02班学号:0930040250 姓名:郭文明2010-2011学年第二学期实验项目:实验二线性表实验目的:本次实习的主要目的在于熟悉线性表的基本运算在两种存储结构上的实现,其中以熟悉各种链表的操作为侧重点。
通过本次实习还可帮助读者复习高级语言的使用方法。
实验内容:城市链表【问题描述】将若干城市的信息,存入一个带头结点的单链表。
结点中的城市信息包括:城市名,城市的位置坐标。
要求能够利用城市名和位置坐标进行有关查找、插入、删除、更新等操作。
【基本要求】(1)给定一个城市名,返回其位置坐标;(2)给定一个位置坐标P和一个距离D,返回所有与P的距离小于等于D的城市。
int Menu(){int choice;printf("************************\n");printf(" 1.新建\n");printf(" 2.根据城市名查找\n");printf(" 3.根据离中心坐标距离查找\n");printf(" 4.输出城市链表\n");printf(" 5.退出\n");printf("============================\n");printf("请选择:");scanf("%d", &choice);return choice;}【程序如下所示】#include<malloc.h> /* malloc()等*/#include<stdio.h> /* EOF(=^Z或F6),NULL */#include<process.h> /* exit() */#include<math.h>#include<stdlib.h>#include<string.h>/* 函数结果状态代码*/#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1/* #define OVERFLOW -2 因为在math.h中已定义OVERFLOW的值为3,故去掉此行*/struct xinxi{int x;int y;};struct LNode{char name[40];struct xinxi zuobiao;struct LNode *next;};typedef struct LNode *LinkList; /* 另一种定义LinkList的方法*/int InitList(LinkList *L) /* 操作结果:构造一个空的线性表L */{*L=(LinkList)malloc(sizeof(struct LNode)); /* 产生头结点,并使L指向此头结点*/if(!*L)/* 存储分配失败*/exit(OVERFLOW);(*L)->next=NULL;/* 指针域为空*/return OK;}int DestroyList(LinkList *L) /* 初始条件:线性表L已存在。
城市链表(实验报告)
本科学生综合性实验报告学院:软件与通信工程学院课程名称:数据结构与算法专业班级:09通信工程1班姓名:王燕学号:0093731学生实验报告(1)一、实验目的1.掌握用 C语言调试程序的基本方法。
2.掌握线性表的基本运算,如创建、插入、删除等。
二、实验内容将若干城市的信息,存入一个带头结点的单链表。
结点中的城市信息包括:城市名,城市的位置坐标。
要求能够利用城市名和位置坐标进行有关查找、插入、删除、更新等操作。
[拓展要求](1)给定一个城市名,返回其位置坐标;(2)给定一个位置坐标P和一个距离D,返回所有与P的距离小于等于D的城市。
三、实验要求1.用C++/C完成算法设计和程序设计并上机调试通过。
2. 实验过程中学生调试完成,需向教师演示实验过程和结果。
3.撰写实验报告,提供实验结果和数据。
4.分析算法,要求给出具体的算法分析结果,包括时间复杂度和空间复杂度,并简要给出算法设计小结和心得。
5. 采用上机情况、程序质量、实习报告相结合的形式,满分为100分。
四、实验仪器1.WindowsXP以上操作系统;2.Visual C++6.0语言环境;3.每人一台PC机。
五、实验内容和步骤1.启动Windows XP操作系统2.创建工作文件夹创建Visual C++ 6.0的工作文件夹。
3.启动Visual C++ 6.0建立一个空工程LinkList,在建立一个源文件citylinklist4.编写代码如下:#include<stdio.h>#include<string.h>#include<malloc.h>#include<stdlib.h>#include<math.h>typedef struct Node{char CityName[10];float CityPoistion[2];struct Node *next;}Node, * LinkList;void InitList(LinkList * H){* H=(LinkList)malloc(sizeof(Node));(* H)->next=NULL;}//建立城市信息链表,以城市名“no”作为结束标识符void CreateCity(LinkList H){Node * r, * s;;char name[10];float x,y;r=H;printf("请输入若干个城市的信息!(以城市名no结束)\n城市名经度纬度\n");scanf("%s%f%f",name,&x,&y);while(strcmp(name,"no")!=0){s=(Node*)malloc(sizeof(Node));strcpy(s->CityName,name);s->CityPoistion[0]=x;s->CityPoistion[1]=y;r->next=s;r=s;scanf("%s%f%f",name,&x,&y);}r->next=NULL;}//在某个城市后面插入一个城市信息int InsertCity(LinkList L){char cityname[10],name[10]; //name为定位城市名,cityname为要插入城市信息的城市名float x,y,x1,y1; //x1,y1是定位城市位置坐标,x,y是要插入城市信息的城市位置坐标int flag;printf("请选择插入方式(0 按城市名插入, 1 按城市位置坐标插入):");scanf("%d",&flag);switch(flag){case 0:p=L;printf("请输入在那个城市名后插入城市信息:");scanf("%s",name);getchar();while((p!=NULL)&&(strcmp(p->CityName,name)!=0))p=p->next;if(p==NULL){printf("没有找到城市名为%s 的城市,插入位置不当!\n",name);}else{printf("在城市%s 后插入一个城市信息:\n城市名经度纬度\n",name);scanf("%s%f%f",cityname,&x,&y);q=(Node*)malloc(sizeof(Node));strcpy(q->CityName,cityname);q->CityPoistion[0]=x;q->CityPoistion[1]=y;q->next=p->next;p->next=q;}break;case 1:p=L;printf("请输入在哪个城市位置坐标后插入城市信息:");scanf("%f%f",&x1,&y1);getchar();while((p!=NULL)&&(p->CityPoistion[0]!=x1)&&(p->CityPoistion[1]!=y1))p=p->next;if(p==NULL){printf("没有找到满足坐标为(%.2f , %.2f)的城市,插入位置不当!\n",x1,y1);}else{printf("在城市坐标为(%.2f , %.2f)的城市后面插入一个城市信息\n城市名经度纬度\n",x1,y1);q=(Node*)malloc(sizeof(Node));strcpy(q->CityName,cityname);q->CityPoistion[0]=x;q->CityPoistion[1]=y;q->next=p->next;p->next=q;}break;}return 1;}//删除一个城市信息int DeleteCity(LinkList L){Node *p,*q;char name[10]; //name是要删除城市信息的城市名float x1,y1; //x,y是要删除城市信息的城市位置坐标int flag;printf("请选择删除方式(0 按城市名删除, 1 按城市坐标删除): ");scanf("%d",&flag);switch(flag){case 0:p=L;q=p->next;printf("请输入要删除城市信息的城市名:");scanf("%s",name);while(q!=NULL && strcmp(q->CityName,name)!=0){q=q->next;p=p->next;}if(q==NULL){printf("没有找到城市名为%s 的城市,删除不成功!\n",name);}else{p->next=q->next;printf("删除了城市%s 的信息.\n",q->CityName);free(q);}break;case 1:p=L;printf("请输入要删除城市信息的城市位置坐标:");scanf("%f%f",&x1,&y1);while((q!=NULL)&&(q->CityPoistion[0]!=x1)&&(q->CityPoistion[1]!=y1)){q=q->next;p=p->next;}if(q==NULL){printf("没有找到满足坐标为(%.2f , %.2f)的城市,删除不成功!\n",x1,y1);}else{printf("删除了城市%s 的信息.\n",q->CityName);p->next=q->next;free(q);}break;}return 1;}//查找一个城市信息int FindCity(LinkList L){Node *p;char name[10]; //name是要查找城市信息的城市名float x1,y1; //x,y是要查找城市信息的城市位置坐标int flag;printf("请选择查找方式(0 按城市名查找, 1 按城市位置坐标查找):");scanf("%d",&flag);switch(flag){case 0:p=L->next;printf("请输入要查找城市信息的城市名:");scanf("%s",&name);while(p!=NULL&&strcmp(p->CityName,name)!=0)p=p->next;if(p==NULL){printf("没有找到城市名为%s 的城市!\n",name);}else{printf("城市名为%s 的城市位置坐标为}break;case 1:p=L->next;printf("请输入要查找城市信息的城市位置坐标:");scanf("%f%f",&x1,&y1);while((p!=NULL)&&(p->CityPoistion[0]!=x1)&&(p->CityPoistion[1]!=y1))p=p->next;if(p==NULL){printf("没有找到城市位置坐标为(%.2f , %.2f)的城市!\n",x1,y1);}elseprintf("城市位置坐标为(%.2f , %.2f)的是城市名为%s \n",p->CityPoistion[0],p->CityPoistion[1],p->CityName);break;}return 1;}//计算二维坐标两点间的距离float Length(float x1,float y1,float x2,float y2){float l;l=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));return l;}//以某点为中心找到所有小于某个距离的城市void SubDAround(LinkList L){Node * q;int n=0;float px,py,d;q=L->next;printf("请输入中心坐标点坐标以及距离:");scanf("%f%f%f",&px,&py,&d);printf("距中心坐标点(%.2f , %.2f) %.2f 的城市有:\n",px,py,d);while(q!=NULL){if(Length(px,py,q->CityPoistion[0],q->CityPoistion[1])<=d){printf("%s %.2f %.2f\n",q->CityName,q->CityPoistion[0],q->CityPoistion[1]);q=q->next;n++;}else}if(n==0) printf("没有任何城市符合条件!\n");}//显示所有城市信息void DisplayCity(LinkList L){Node * p;p=L->next;printf("城市名经度纬度\n");while(p!=NULL){printf("%s %.2f %.2f\n",p->CityName,p->CityPoistion[0],p->CityPoistion[1]);p=p->next;}}void main(){int k=1;LinkList CLL;InitList(&CLL);while(k){printf("\n\n\t\t\t城市信息管理系统\n\n");printf("\t\t\t1.建立一个城市信息链表\n");printf("\t\t\t2.查找一个城市信息\n");printf("\t\t\t3.插入一个城市信息\n");printf("\t\t\t4.删除一个城市信息\n");printf("\t\t\t5.显示所有城市信息\n");printf("\t\t\t6.距某点小于某距离的所有城市信息\n");printf("\t\t\t0.退出\n");printf("请选择操作项目:");scanf("%d",&k);system("cls");switch(k){case 1:CreateCity(CLL);system("pause");break;case 2:FindCity(CLL);system("pause");break;case 3:InsertCity(CLL);system("pause");break;case 4:DeleteCity(CLL);system("pause");break;case 5:DisplayCity(CLL);system("pause");break;case 6:SubDAround(CLL);system("pause");break;case 0:break;}system("cls");}5.编译、运行,结果如下:开始界面:建立城市城市信息链表:显示建立城市信息链表后的内容:按城市名查找城市信息,而且查找成功:按城市名查找城市信息,但查找不成功:按城市坐标查找城市信息,而且查找成功:按城市名查找城市信息,但查找不成功:按城市名在某个城市后面插入一个城市信息,而且插入成功:按城市名在某个城市后面插入一个城市信息,但插入不成功:按城市坐标在某个城市后面插入一个城市信息,而且插入成功:按城市坐标在某个城市后面插入一个城市信息,但插入不成功:显示插入城市信息后城市链表的内容:按城市名删除一个城市信息,而且删除成功:按城市名删除一个城市信息,但删除不成功:按城市坐标删除一个城市信息,而且删除成功:按城市坐标删除一个城市信息,但删除不成功:显示删除一些城市信息后城市链表的内容:寻找以某点中心小于某个距离的所有城市信息,而且寻找成功:寻找以某点中心小于某个距离的所有城市信息,但寻找不成功:选择退出后的页面:四、结论1、实验结果实现了在城市链表中利用城市名和位置坐标进行有关查找、插入、删除、更新基本要求的操作。
城市链表课程设计
城市链表课程设计一、教学目标本课程旨在通过学习城市链表的相关知识,让学生了解和掌握城市链表的基本概念、原理和应用。
具体目标如下:1.了解城市链表的基本概念和原理。
2.掌握城市链表的创建、插入、删除和查找等基本操作。
3.了解城市链表在城市规划和管理中的作用和应用。
4.能够运用城市链表解决实际问题,如城市交通管理、城市规划等。
5.能够使用相关软件工具进行城市链表的创建、编辑和管理。
情感态度价值观目标:1.培养学生的创新意识和解决问题的能力。
2.培养学生对城市规划和管理的社会责任感和使命感。
二、教学内容本课程的教学内容主要包括以下几个部分:1.城市链表的基本概念和原理:介绍城市链表的定义、特点和应用场景。
2.城市链表的创建和维护:讲解城市链表的创建方法、插入和删除操作的原理和实现。
3.城市链表的查找和应用:介绍城市链表的查找方法以及在城市规划和管理中的具体应用。
4.城市链表的实际案例分析:分析城市链表在实际城市规划和管理中的成功案例,探讨其优点和不足。
三、教学方法为了提高学生的学习兴趣和主动性,本课程将采用多种教学方法相结合的方式进行教学。
包括:1.讲授法:通过讲解城市链表的基本概念、原理和应用,使学生掌握相关知识。
2.案例分析法:分析城市链表在实际城市规划和管理中的成功案例,让学生了解城市链表的实际应用。
3.实验法:学生进行城市链表的创建、插入、删除和查找等操作的实验,提高学生的动手能力。
四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,我们将准备以下教学资源:1.教材:选择一本适合学生层次的城市链表示意图料作为主要教学资源。
2.多媒体资料:制作课件、教案等多媒体资料,以图文并茂的形式展示城市链表的相关知识。
3.实验设备:准备计算机、网络设备等实验设备,为学生提供实际操作城市链表的机会。
4.参考书:提供相关的参考书籍,供学生课后自主学习和拓展知识。
五、教学评估本课程的教学评估将采用多元化方式进行,以全面、客观、公正地评估学生的学习成果。
城市链表课程设计
湖南商学院《城市链表》课程设计(实习)报告题目姓名: 彭应品学号: 080910135专业: 电子信息工程班级: 电信0804指导教师: 李姣燕职称: 讲师计算机与电子工程学院2011年12月课程设计(实习)评审表课程设计(实习)作品验收表注:1. 除“验收情况”栏外,其余各栏均由学生在作品验收前填写。
2. “验收情况”栏由验收小组按实际验收的情况如实填写。
目录1 课程设计任务与要求 (1)1.2 问题分析 (1)2系统总体设计 (1)2.1 总体设计思想、设计方案的选择 (1)2.2 系统模块设计 (1)3 系统详细设计 (2)3.1 系统子程序及功能设计 (2)3.3 函数主要调用关系图 (3)4 系统详细设计 (3)4.1 数据类型定义 (3)4.2 系统主要子程序设计 (3)5 系统实现与测试 (6)5.1 建立城市链表 (6)5.2 浏览城市链表 (6)5.3城市链表的查找 (6)5.4 城市链表的插入 (7)5.6 城市链表的更新 (7)5.7 查看给定范围内的城市 (7)5.8文件的载入与保存 (8)5.9系统设置 (8)6软件使用说明书 (8)7 课程设计总结 (9)参考文献 (9)1 课程设计任务与要求1.1 课程设计任务将城市信息存在单链表里,对其实现常见的链表操作1.2 问题分析由若干个城市的信息,存入一个带头节点的单链表。
节点中的城市信息包括城市名,城市坐标,城市面积,城市人口等。
要求能够利用城市名和位置坐标进行有关的查找,插入,删除,更新等操作。
2系统总体设计为了实现上述需求可以从以下几个方面着手进行设计。
2.1 总体设计思想、设计方案的选择本系统主要采用链表结构类型来存储数据,其中节点由四个部分组成:城市名称,城市坐标,城市人口和城市面积。
2.2 系统模块设计本系统共设计了9个主要的子功能,各功能的描叙如下所述:(1)建立城市链表,可以一次性的输入多条城市的信息,建立城市信息表。
城市链表课程设计
城市链表课程设计一、引言城市链表是指一个城市网络系统,通过连接不同的城市,形成一个有机的整体。
城市链表的设计与实现是城市规划和交通管理的重要组成部分。
本文将介绍城市链表的设计原理、应用场景以及实现方法。
二、城市链表的设计原理1. 城市链表的概念城市链表是由多个城市节点组成的有向图。
每个城市节点代表一个城市,节点之间的边表示城市之间的交通连接关系。
通过城市链表,可以方便地查找和管理城市之间的交通信息。
2. 城市节点的属性每个城市节点包含以下属性:- 城市名称:唯一标识一个城市的名称;- 经纬度:表示城市的地理位置;- 人口数量:反映城市的人口规模;- 交通状况:描述城市的交通拥堵程度。
3. 城市节点之间的连接关系城市节点之间的连接关系可以用边来表示,边的属性包括:- 距离:表示两个城市之间的距离;- 交通工具:表示两个城市之间的交通工具种类,如公路、铁路、航空等。
三、城市链表的应用场景1. 城市规划城市链表可以帮助城市规划部门进行城市布局和交通规划。
通过分析城市链表中城市节点之间的连接关系,可以确定城市之间的交通需求,合理规划道路和交通设施的建设。
2. 交通管理城市链表可以用于交通管理系统,帮助交通管理部门实时监控和调度城市交通。
通过城市链表,可以获取城市节点的交通状况,及时调整交通信号灯、交通流量等,以提高交通效率和减少拥堵。
3. 旅游规划城市链表可以帮助旅游部门进行旅游线路规划和推荐。
通过分析城市链表中城市节点之间的距离和交通工具,可以为游客提供最佳的旅游路线和交通方案。
4. 物流管理城市链表可以用于物流管理系统,帮助物流公司进行货物配送和仓储管理。
通过城市链表,可以确定不同城市节点之间的距离和交通工具,优化货物配送路线,提高物流效率。
四、城市链表的实现方法1. 数据结构城市链表可以使用图的数据结构来实现,每个城市节点可以用一个类或结构体来表示,节点之间的连接关系可以用邻接矩阵或邻接表来表示。
链表顺序表实验报告--数据结构与算法分析
1.顺序表的定义
(1) 顺序存储方法
即把线性表的结点按逻辑次序依次存放在一组地址连续的存储单元里的方法。
(2) 顺序表(Sequential List)
用顺序存储方法存储的线性表简称为顺序表(Sequential List)。
2. 结点ai的存储地址
不失一般性,设线性表中所有结点的类型相同,则每个结点所占用存储空间大小亦相同。假设表中每个结点占用c个存储单元,其中第一个单元的存储地址则是该结点的存储地址,并设表中开始结点a1的存储地址(简称为基地址)是LOC(a1),那么结点ai的存储地址LOC(ai)可通过下式计算:
程序流程图
3.源程序清单:
//顺序表实现城市数据库
#include <iostream>
#include <string>
#include "stdlib.h"
#include <iomanip>
#include <fstream>
using namespace std;
#define LIST_INIT_SIZE 100
}
*q =e;
L.length++;
cout<<"插入成功"<<endl;
return;
}
cout<<"插入位置非法!"<<endl;
}
//按名字删除元素,并由e返回其值
void ListDelete_Name(SqList &L, string name, CityData &e)
{
if(L.length > 0)
数据结构链表课程设计
数据结构链表课程设计一、课程目标知识目标:1. 理解链表的基本概念,掌握链表的存储结构及其特点。
2. 学会使用链表实现数据的插入、删除和查找等基本操作。
3. 了解链表在实际应用场景中的优势,如解决动态数据存储问题。
技能目标:1. 能够编写链表的初始化、插入、删除和查找等操作的代码。
2. 能够运用所学知识解决实际问题,如设计一个简单的链表应用系统。
3. 能够分析链表操作的时间复杂度和空间复杂度。
情感态度价值观目标:1. 培养学生独立思考、解决问题的能力,增强自信心。
2. 培养学生团队协作精神,学会在讨论和交流中共同进步。
3. 激发学生对数据结构学习的兴趣,提高自主学习能力。
分析课程性质、学生特点和教学要求,我们将课程目标分解为以下具体学习成果:1. 掌握链表的基本概念,能够用文字和图形描述链表结构。
2. 熟练编写链表相关操作代码,能够实现简单的链表应用。
3. 了解链表的优势和局限性,能够结合实际场景选择合适的数据结构。
4. 培养良好的编程习惯,注重代码的规范性和可读性。
5. 通过小组合作,培养学生的沟通协作能力和团队精神。
6. 提高学生对数据结构在计算机科学中重要性的认识,激发学习兴趣。
二、教学内容根据课程目标,本章节教学内容主要包括以下几部分:1. 链表基本概念:介绍链表的定义、分类(单向链表、双向链表、循环链表等),以及链表在数据结构中的重要性。
2. 链表的存储结构:讲解链表节点的定义,以及链表的内存存储方式。
3. 链表基本操作:- 初始化:介绍如何创建一个空链表。
- 插入:讲解链表节点插入的原理和实现方法,包括头插法和尾插法。
- 删除:阐述链表节点删除的原理,以及如何实现删除指定节点。
- 查找:介绍如何在链表中查找指定元素,并实现相关功能。
4. 链表应用案例分析:分析实际应用场景,如多项式表示、约瑟夫问题等。
5. 链表性能分析:讨论链表操作的时间复杂度和空间复杂度。
教学内容安排和进度如下:1. 第1课时:链表基本概念、存储结构。
城市链表实验报告汇总
2014-2015学年第一学期实验报告课程名称:算法与数据结构实验名称:城市链表一、实验目的本次实验的主要目的在于熟悉线性表的基本运算在两种存储结构上的实现,其中以熟悉各种链表的操作为侧重点。
同时,通过本次实验帮助学生复习高级语言的使用方法。
二、实验内容(一)城市链表:将若干城市的信息,存入一个带头结点的单链表。
结点中的城市信息包括:城市名,城市的位置坐标。
要求能够利用城市名和位置坐标进行有关查找、插入、删除、更新等操作。
(二) 约瑟夫环m 的初值为20;密码:3,1,7,2,6,8,4(正确的结果应为6,1,4,7,2,3,5)。
三、实验环境VS2010 、win8.1四、实验结果(一)城市链表:(1)创建城市链表;(2)给定一个城市名,返回其位置坐标;(3)给定一个位置坐标P 和一个距离D,返回所有与P 的距离小于等于D 的城市。
(4)在已有的城市链表中插入一个新的城市;(5)更新城市信息;(6)删除某个城市信息。
(二) 约瑟夫环m 的初值为20;密码:3,1,7,2,6,8,4输出6,1,4,7,2,3,5。
五、附录城市链表:5.1 问题分析该实验要求对链表实现创建,遍历,插入,删除,查询等操作,故使用单链表。
5.2 设计方案该程序大致分为以下几个模块:1.创建城市链表模块,即在空链表中插入新元素。
故创建城市链表中包涵插入模块。
2.返回位置坐标模块。
3.计算距离模块4.插入模块。
5.更新城市信息模块6.删除信息模块。
5.3 算法5.3.1 根据中心城市坐标,返回在距离内的所有城市:void FindCityDistance(citylist *L){//根据距离输出城市……//输入信息与距离L=L->next;while(L != NULL){if(((L->x-x1)*(L->x-x1)+(L->y-y1)*(L->y-y1)<=dis*dis)&&(((L-> x-x1)+(L->y-y1))!=0 )){printf("城市名称%s\n",L->Name);printf("城市坐标%.2lf,%.2lf\n",L->x,L->y);}L=L->next;}}该算法主要用到了勾股定理,考虑到不需要实际数值,只需要大小比较,所以只用横坐标差的平方+纵坐标差的平方 <= 距离的平方判定。
数据结构课程设计实验1 城市链表
数据结构课程设计实验1 城市链表城市链表是数据结构课程设计实验1的主题之一,该实验旨在让学生通过设计和实现一个城市链表来加深对数据结构的理解和应用能力。
在这个实验中,学生需要使用合适的数据结构和算法来表示和操作城市信息,以便能够方便地进行城市的增删改查等操作。
一、实验目的本实验的目的是让学生掌握以下内容:1. 理解链表这种数据结构的定义和基本操作;2. 掌握链表的插入、删除、查找等操作的实现方法;3. 熟悉链表的遍历和修改操作;4. 能够设计和实现一个城市链表,实现城市信息的增删改查等功能。
二、实验要求1. 设计一个城市链表的数据结构,包括城市名称、人口数量、GDP等信息;2. 实现城市链表的创建、插入、删除、查找等操作;3. 实现城市链表的遍历和修改操作;4. 实现城市链表的保存和读取功能,将城市信息保存到文件中;5. 编写测试程序,测试城市链表的各项功能是否正确实现。
三、实验设计1. 数据结构设计城市链表的数据结构可以使用单向链表或者双向链表来实现。
每一个节点包含城市名称、人口数量、GDP等信息,可以使用结构体来定义节点的数据类型。
2. 城市链表操作的实现a. 创建链表:通过读取文件或者手动输入的方式创建一个空的城市链表。
b. 插入节点:实现在链表的指定位置插入一个新的城市节点。
c. 删除节点:实现删除链表中指定位置的城市节点。
d. 查找节点:实现根据城市名称查找链表中对应的城市节点。
e. 遍历链表:实现遍历链表,输出链表中的所有城市信息。
f. 修改节点:实现修改链表中指定位置的城市节点的信息。
g. 保存和读取:将链表中的城市信息保存到文件中,并能够从文件中读取城市信息。
3. 测试程序设计编写一个测试程序,对城市链表的各项功能进行测试。
包括创建链表、插入节点、删除节点、查找节点、遍历链表、修改节点、保存和读取等功能的测试。
四、实验步骤1. 设计链表的数据结构,定义节点的数据类型和链表的操作函数。
城市链表实验报告
2014-2015学年第一学期实验报告课程名称: 算法与数据结构实验名称: 城市链表一、实验目的本次实验的主要目的在于熟悉线性表的基本运算在两种存储结构上的实现,其中以熟悉各种链表的操作为侧重点。
同时,通过本次实验帮助学生复习高级语言的使用方法。
二、实验内容(一)城市链表:将若干城市的信息,存入一个带头结点的单链表。
结点中的城市信息包括:城市名,城市的位置坐标。
要求能够利用城市名与位置坐标进行有关查找、插入、删除、更新等操作。
(二) 约瑟夫环m 的初值为20;密码:3,1,7,2,6,8,4(正确的结果应为6,1,4,7,2,3,5)。
三、实验环境VS2010 、win8、1四、实验结果(一)城市链表:(1) 创建城市链表;(2) 给定一个城市名,返回其位置坐标;(3) 给定一个位置坐标P 与一个距离D,返回所有与P 的距离小于等于D 的城市。
(4) 在已有的城市链表中插入一个新的城市;(5) 更新城市信息;(6) 删除某个城市信息。
(二) 约瑟夫环m 的初值为20;密码:3,1,7,2,6,8,4输出6,1,4,7,2,3,5。
五、附录城市链表:5、1 问题分析该实验要求对链表实现创建,遍历,插入,删除,查询等操作,故使用单链表。
5、2 设计方案该程序大致分为以下几个模块:1、创建城市链表模块,即在空链表中插入新元素。
故创建城市链表中包涵插入模块。
2、返回位置坐标模块。
3、计算距离模块4、插入模块。
5、更新城市信息模块6、删除信息模块。
5、3 算法5、3、1 根据中心城市坐标,返回在距离内的所有城市:void FindCityDistance(citylist *L){//根据距离输出城市……//输入信息与距离L=L->next;while(L != NULL){if(((L->x-x1)*(L->x-x1)+(L->y-y1)*(L->y-y1)<=dis*dis)&&(((L-> x-x1)+(L->y-y1))!=0 )){printf("城市名称%s\n",L->Name);printf("城市坐标%、2lf,%、2lf\n",L->x,L->y);}L=L->next;}}该算法主要用到了勾股定理,考虑到不需要实际数值,只需要大小比较,所以只用横坐标差的平方+纵坐标差的平方 <= 距离的平方判定。
链表课程设计数据结构
链表课程设计数据结构一、教学目标本节课的教学目标是让学生掌握链表的基本概念、原理和操作方法,包括链表的定义、结构、创建、插入、删除等基本操作,以及循环链表和双向链表的概念和应用。
同时,通过实践操作,培养学生的逻辑思维能力和编程能力,提高学生对数据结构的理解和应用能力。
在教学过程中,注重培养学生的团队合作意识和问题解决能力,使学生在学习过程中能够积极主动地参与讨论和实践,形成良好的学习习惯和态度。
二、教学内容本节课的教学内容主要包括链表的基本概念和操作方法。
首先,介绍链表的定义和结构,让学生了解链表是由一系列节点组成的数据结构,每个节点包含数据部分和指向下一个节点的指针。
然后,讲解链表的创建、插入、删除等基本操作,并通过示例代码让学生动手实践,加深对链表操作的理解。
接下来,介绍循环链表和双向链表的概念和应用,让学生了解循环链表是一种特殊的链表结构,每个节点都指向下一个节点,形成一个环状结构;双向链表则是一种每个节点都包含指向前一个节点和指向下一个节点的指针的链表结构。
最后,通过案例分析和讨论,让学生掌握链表在实际应用中的优势和局限性。
三、教学方法为了达到本节课的教学目标,将采用多种教学方法相结合的方式进行教学。
首先,采用讲授法,向学生讲解链表的基本概念和原理,让学生了解链表的定义、结构及其操作方法。
其次,采用讨论法,学生进行小组讨论,让学生分享对链表的理解和应用经验,互相学习和交流。
接下来,采用案例分析法,展示实际应用场景中的链表实例,让学生分析链表在解决问题时的优势和局限性。
最后,采用实验法,让学生动手编写代码实践链表的操作,培养学生的编程能力和解决问题的能力。
四、教学资源为了支持本节课的教学内容和教学方法的实施,将准备以下教学资源。
首先,教材《数据结构与算法》,提供链表的基本概念、原理和操作方法的理论支持。
其次,参考书籍,包括《链表编程实战》等,为学生提供更多的实践案例和经验分享。
再次,多媒体资料,包括PPT课件、教学视频等,为学生提供直观的学习材料,帮助学生更好地理解和掌握链表知识。
数据结构实验报告-实验一顺序表、单链表基本操作的实现
数据结构实验报告-实验⼀顺序表、单链表基本操作的实现实验⼀顺序表、单链表基本操作的实现l 实验⽬的1、顺序表(1)掌握线性表的基本运算。
(2)掌握顺序存储的概念,学会对顺序存储数据结构进⾏操作。
(3)加深对顺序存储数据结构的理解,逐步培养解决实际问题的编程能⼒。
l 实验内容1、顺序表1、编写线性表基本操作函数:(1)InitList(LIST *L,int ms)初始化线性表;(2)InsertList(LIST *L,int item,int rc)向线性表的指定位置插⼊元素;(3)DeleteList1(LIST *L,int item)删除指定元素值的线性表记录;(4)DeleteList2(LIST *L,int rc)删除指定位置的线性表记录;(5)FindList(LIST *L,int item)查找线性表的元素;(6)OutputList(LIST *L)输出线性表元素;2、调⽤上述函数实现下列操作:(1)初始化线性表;(2)调⽤插⼊函数建⽴⼀个线性表;(3)在线性表中寻找指定的元素;(4)在线性表中删除指定值的元素;(5)在线性表中删除指定位置的元素;(6)遍历并输出线性表;l 实验结果1、顺序表(1)流程图(2)程序运⾏主要结果截图(3)程序源代码#include<stdio.h>#include<stdlib.h>#include<malloc.h>struct LinearList/*定义线性表结构*/{int *list; /*存线性表元素*/int size; /*存线性表长度*/int Maxsize; /*存list数组元素的个数*/};typedef struct LinearList LIST;void InitList(LIST *L,int ms)/*初始化线性表*/{if((L->list=(int*)malloc(ms*sizeof(int)))==NULL){printf("内存申请错误");exit(1);}L->size=0;L->Maxsize=ms;}int InsertList(LIST *L,int item,int rc)/*item记录值;rc插⼊位置*/ {int i;if(L->size==L->Maxsize)/*线性表已满*/return -1;if(rc<0)rc=0;if(rc>L->size)rc=L->size;for(i=L->size-1;i>=rc;i--)/*将线性表元素后移*/L->list[i+=1]=L->list[i];L->list[rc]=item;L->size++;return0;}void OutputList(LIST *L)/*输出线性表元素*/{int i;printf("%d",L->list[i]);printf("\n");}int FindList(LIST *L,int item)/*查找线性元素,返回值>=0为元素的位置,返回-1为没找到*/ {int i;for(i=0;i<L->size;i++)if(item==L->list[i])return i;return -1;}int DeleteList1(LIST *L,int item)/*删除指定元素值得线性表记录,返回值为>=0为删除成功*/ {int i,n;for(i=0;i<L->size;i++)if(item==L->list[i])break;if(i<L->size){for(n=i;n<L->size-1;n++)L->list[n]=L->list[n+1];L->size--;return i;}return -1;}int DeleteList2(LIST *L,int rc)/*删除指定位置的线性表记录*/{int i,n;if(rc<0||rc>=L->size)return -1;for(n=rc;n<L->size-1;n++)L->list[n]=L->list[n+1];L->size--;return0;}int main(){LIST LL;int i,r;printf("list addr=%p\tsize=%d\tMaxsize=%d\n",LL.list,LL.size,LL.Maxsize);printf("list addr=%p\tsize=%d\tMaxsize=%d\n",LL.list,LL.list,LL.Maxsize);while(1){printf("请输⼊元素值,输⼊0结束插⼊操作:");fflush(stdin);/*清空标准输⼊缓冲区*/scanf("%d",&i);if(i==0)break;printf("请输⼊插⼊位置:");scanf("%d",&r);InsertList(&LL,i,r-1);printf("线性表为:");OutputList(&LL);}while(1){printf("请输⼊查找元素值,输⼊0结束查找操作:");fflush(stdin);/*清空标准输⼊缓冲区*/scanf("%d ",&i);if(i==0)break;r=FindList(&LL,i);if(r<0)printf("没有找到\n");elseprintf("有符合条件的元素,位置为:%d\n",r+1);}while(1){printf("请输⼊删除元素值,输⼊0结束查找操作:");fflush(stdin);/*清楚标准缓存区*/scanf("%d",&i);if(i==0)break;r=DeleteList1(&LL,i);if(i<0)printf("没有找到\n");else{printf("有符合条件的元素,位置为:%d\n线性表为:",r+1);OutputList(&LL);}while(1){printf("请输⼊删除元素位置,输⼊0结束查找操作:");fflush(stdin);/*清楚标准输⼊缓冲区*/scanf("%d",&r);if(r==0)break;i=DeleteList2(&LL,r-1);if(i<0)printf("位置越界\n");else{printf("线性表为:");OutputList(&LL);}}}链表基本操作l 实验⽬的2、链表(1)掌握链表的概念,学会对链表进⾏操作。
数据结构实验1顺序表_链表
淮海工学院计算机科学系实验报告书课程名:《数据结构》题目:线性表数据结构试验班级:软件112学号:姓名:线性表实验报告要求1目的与要求:1)掌握线性表数据结构的基本概念和抽象数据类型描述;2)熟练掌握线性表数据结构的顺序和链式存储存表示;3)熟练掌握线性表顺序存储结构的基本操作算法实现;4)熟练掌握线性表的链式存储结构的基本操作算法实现;5)掌握线性表在实际问题中的应用和基本编程技巧;6)按照实验题目要求独立正确地完成实验内容(提交程序清单及相关实验数据与运行结果);7)按照报告格式和内容要求,认真书写实验报告,并在试验后的第三天提交电子(全班同学提交到学委,再统一打包提交给老师)和纸质(每班每次5份,学委安排,保证每个同学至少提交一次);8)积极开展实验组组内交流和辅导,严禁复制和剽窃他人实验成果,一旦发现严肃处理;9)上实验课前,要求每个同学基本写好程序,并存储在自己的U盘上,用于实验课堂操作时调试和运行。
凡不做准备,没有提前编写程序者,拒绝上机试验。
2实验内容或题目一、顺序表的基本操作实现实验要求:数据元素类型ElemType取整型int。
按照顺序存储结构实现如下算法:1)创建任意整数线性表(即线性表的元素值随机在键盘上输入)的顺序存储结构(即顺序表),长度限定在25之内;2)打印/显示(遍历)该线性表(依次打印/显示出表中元素值);3)在顺序表中查找第i个元素,并返回其值;4)在顺序表第i个元素之前插入一已知元素;5)在顺序表中删除第i个元素;6)求顺序表中所有元素值(整数)之和;二、链表(带头结点)基本操作实验要求:数据元素类型ElemType取字符型char。
按照动态单链表结构实现如下算法:1)按照头插法或尾插法创建一个带头结点的字符型单链表(链表的字符元素从键盘输入),长度限定在10之内;2)打印(遍历)该链表(依次打印出表中元素值,注意字符的输入顺序与链表的结点顺序);3)在链表中查找第i个元素,i合法返回元素值,否则,返回FALSE;4)在链表中查找与一已知字符相同的第一个结点,有则返回TRUE,否则,返回FALSE;5)在链表中第i个结点之前插入一个新结点;6)在线性表中删除第i个结点;7)计算链表的长度。
数据结构实验报告链表
数据结构实验报告链表
《数据结构实验报告:链表》
在计算机科学领域,数据结构是一门重要的课程,它对于计算机程序的设计和性能有着至关重要的作用。
其中,链表是一种常见的数据结构,它在实际应用中有着广泛的用途。
在本次实验中,我们将深入研究链表这一数据结构,并通过实验来验证其性能和应用。
首先,我们需要了解链表的基本概念。
链表是由一系列节点组成的数据结构,每个节点包含数据和指向下一个节点的指针。
相比于数组,链表具有动态的内存分配和插入/删除操作的优势,但在访问元素时性能稍逊色。
因此,链表适用于需要频繁插入/删除操作的场景。
在本次实验中,我们将实现一个简单的链表数据结构,并进行一系列的操作。
首先,我们将实现链表的创建、插入、删除和遍历等基本操作,并通过实验验证其正确性和性能。
其次,我们将对比链表和数组在不同场景下的性能差异,以便更好地理解链表的适用场景和特点。
通过本次实验,我们将深入了解链表这一数据结构的原理和应用,掌握其基本操作和性能特点,为今后的程序设计和优化提供重要的参考。
同时,我们也将通过实验数据和分析来验证链表的优势和不足,为选择合适的数据结构提供依据。
希望本次实验能够为大家对数据结构和算法有更深入的理解和掌握提供帮助。
通过本次实验,我们对链表这一数据结构有了更深入的了解,并通过实验验证了其性能和应用。
链表作为一种常见的数据结构,在实际应用中有着广泛的用途,掌握其原理和操作对于程序设计和性能优化至关重要。
希望本次实验能够
为大家对数据结构和算法有更深入的理解和掌握提供帮助。
城市链表课程设计目的
城市链表课程设计目的一、教学目标本课程的教学目标是让学生了解和掌握城市链表的基本概念、原理和应用,培养学生运用城市链表解决实际问题的能力。
具体目标如下:1.知识目标:(1)了解城市链表的定义、特点和基本操作。
(2)掌握城市链表的创建、插入、删除和遍历等基本方法。
(3)理解城市链表在城市规划、交通管理等方面的应用。
2.技能目标:(1)能够运用城市链表表示和处理实际问题。
(2)能够独立完成城市链表的创建、插入、删除和遍历等操作。
(3)能够对城市链表进行简单的优化和性能分析。
3.情感态度价值观目标:(1)培养学生对城市规划、交通管理等领域的兴趣和责任感。
(2)培养学生团队合作、创新思维和解决问题的能力。
二、教学内容本课程的教学内容主要包括以下几个部分:1.城市链表的基本概念:介绍城市链表的定义、特点和应用场景。
2.城市链表的基本操作:讲解城市链表的创建、插入、删除和遍历等方法。
3.城市链表的应用:介绍城市链表在城市规划、交通管理等方面的具体应用。
4.城市链表的优化和性能分析:探讨如何提高城市链表的效率,并进行性能分析。
三、教学方法为了提高学生的学习兴趣和主动性,本课程将采用多种教学方法,如讲授法、讨论法、案例分析法和实验法等。
1.讲授法:用于讲解城市链表的基本概念、原理和操作方法。
2.讨论法:鼓励学生就城市链表的应用和优化问题进行讨论,培养团队合作和创新思维。
3.案例分析法:通过分析实际案例,使学生更好地理解城市链表在城市规划、交通管理等方面的应用。
4.实验法:让学生动手实践,独立完成城市链表的创建、插入、删除和遍历等操作。
四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,我们将选择和准备以下教学资源:1.教材:选用权威、实用的城市链表教材,为学生提供系统的理论知识。
2.参考书:提供相关的城市规划、交通管理等方面的参考书籍,拓宽学生的知识视野。
3.多媒体资料:制作精美的PPT、动画等多媒体资料,帮助学生形象地理解城市链表的概念和原理。
数据结构城市链表
数据结构实验报告___09___级__x____班_xxxxx___年___xx___月__xx___日姓名__xxxxx___ 学号_xxxxxxx___ 得分_____________1.实验题目将若干城市的信息,存入一个带头结点的单链表。
结点中的城市信息包括:城市名,城市的位置坐标。
要求能够利用城市名和位置坐标进行有关查找、插入、删除、更新等操作。
2.需求分析本演示程序用VC编写,完成城市链表的生成,插入、删除,更新等操作。
①输入的形式和输入值的范围:先创建一个城市链表需要输入五个城市的名称及城市的位置坐标;再输入你需要对链表的操作功能号1输出城市链表信息、2查找、3插入、4删除、5修改、6输出与坐标P距离小于D的城市、0退出程序.查找城市时输入城市的名称;插入城市信息时输入城西的名称及它的位置坐标;删除链表中的城市需输入城市的名称;修改城市链表是需输入旧的城市名和新的城市名及新的位置坐标;操作6应输入中心城市的坐标及一个距离范围。
在所有输入中,操作功能号是整数,城市名是单个的字母,位置坐标及距离是浮点型的数字。
②输出的形式:黑框界面出现时就提示出入5个城市的数据域,之后每次操作都会输出包含各个操作的功能表以供选择,输出城市链表是会输出城市名及位置坐标,其它的操作每一步都会输出相应的提示信息。
③程序所能达到的功能:完成城市链表的生成、插入、删除、查找及更新操作④测试数据:A.创建城市链表操作中依次输入e 1.0 2.0←d 2.0 2.5←c 4.5 3.2←b 5.42.6←a 7.4 5.2生成一个城市链表B.查找操作中输入城市名 c 返回这个城市的位置坐标4.5 3.2C.插入操作中依次输入新的城市名及位置坐标f,7.4,3.5,返回插入成功提示D.删除操作中输入需删除的城市名 f ,返回删除成功提示E.更新操作依次输入e,g,2.8,5.7 返回更新成功提示F.查找距离操作中依次输入中心坐标及距离3.8,6.4,2.66 返回链表中符合要求的城市信息g,2.8,5.73.概要设计1)为了实现上述程序功能,需要定义单链表的抽象数据类型:ADT LinkList {数据对象:D={ai|ai∈IntegerSet,i=0,1,2,…,n,n≥0}数据关系:R={<ai,ai+1>|ai,ai+1 ∈D}基本操作:City CreateList()操作结果:构造一个城市链表L,录入五个城市信息.search()初始条件:城市链表已存在操作结果:查找是否有与输入值一致的城市名,若存在,返回城市的位置坐标;Insert()初始条件:城市链表已存在操作结果:将新的城市信息插入到链表中Delete()初始条件:城市链表已存在操作结果:删除链表需要删除的城市信息distance()初始条件:城市链表已存在操作结果:输出给定的一个距离范围内的所有城市信息alter()初始条件:城市链表已存在操作结果:修改链表中的城市信息print()初始条件:城市链表已存在操作结果:打印出城市链表中的所有城市信息begin()操作结果:在屏幕上显示操作功能号2)本程序包含8个函数:①主函数main()②创建城市链表函数City CreateList()③显示操作功能函数void begin()④显示单链表城市信息函数void print()⑤插入一个城市函数void Insert()⑥删除一个城市信息函数void Delete()⑦查找城市坐标函数void search()⑧修改城市链表函数void alter()⑧查找一个固定距离范围内的城市void distance()各函数间关系如下:4.详细设计#include<stdio.h>#include<malloc.h>#include<math.h>#include <stdlib.h>#include <string.h>typedef int status;typedef struct data{char Cname;float x;float y;}data;typedef struct CityNode{data data;struct CityNode *next;}CityNode,*City;City L;City CreateList(){//创建城市链表int i;City p;L=(City )malloc(sizeof(CityNode));L->next=NULL;printf("请输入5个城市的数据域:\n");for(i=0;i<5;i++){p=(City)malloc(sizeof(CityNode));scanf("%c %f %f",&p->ame,&p->data.x,&p->data.y);getchar();p->next=L->next;L->next=p;}return L;}void search(){//查找城市坐标char name;City p;p=L;printf("请输入需要查找的城市名:\n");scanf("%c",&name);printf("该城市的坐标为:\n");while(p){if(p->ame==name)printf("%f,%f",p->data.x,p->data.y);p=p->next;}}void Insert(){//插入新的城市City p=L->next;City s=(City)malloc(sizeof(CityNode));printf("请输入要插入的城市名及它的坐标");scanf("%c,%f,%f",&s->ame,&s->data.x,&s->data.y);s->next=p->next;p->next=s;printf("新城市%c插入成功\n",s->ame);}void Delete(){//删除城市City q,p=L->next;int j=0;char z;printf("请输入要删除的城市名:\n");scanf("%c",&z);while(p->ame!=z){q=p;p=p->next;}q->next=p->next;free(p);printf("删除成功!\n");}void distance(){//距离范围内的城市float s,d;float x1,y1,x2,y2;City p;p=L->next;printf("请输入中心坐标x1,y1:\n");scanf("%f,%f",&x1,&y1);printf("请输入与中心城市的距离范围d:\n");scanf("%f",&d);while(p){x2=p->data.x;y2=p->data.y;s=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));if(s<=d){printf("与(%f,%f)的中心城市的距离小于等于%f的城市有:\n",x1,y1,d); printf("%c,%f,%f",p->ame,x2,y2);}p=p->next;}}void alter(){//修改城市节点char a,b;float m,n;int k=0;City p=L;printf("请输入旧的城市名:");scanf("%c",&a);while(p->ame!=a){p=p->next;}printf("请输入新的城市名:\n");scanf(" %c",&b);printf("请输入新的城市坐标:\n");scanf("%f,%f",&m,&n);p->ame=b;p->data.x=m;p->data.y=n;}void print(){//输出城市链表int i;City a;char name[10];float x[10];float y[10];a=L->next;i=0;while(a){name[i]=a->ame;x[i]=a->data.x;y[i]=a->data.y;a=a->next;printf("%c (%f,%f)\n",name[i],x[i],y[i]);i++;}}void begin(){int i;do{printf("\n");printf("--------------------------------------------\n");printf(" 请选择需要操作的功能:\n");printf(" 1->输出城市链表信息\n");printf(" 2->查找\n");printf(" 3->插入\n");printf(" 4->删除\n");printf(" 5->修改\n");printf(" 6->与坐标P距离小于D的城市\n");printf(" 0->退出程序\n");printf("--------------------------------------------\n");printf("\n");printf("请输入您选择的功能号:");scanf("%d",&i);getchar();if(i>0)switch(i){case 1:print();break;case 2:search();break;case 3:Insert();break;case 4:Delete();break;case 5:alter();break;case 6:distance();break;case 0:break;}printf("\n");if(i<0)printf("您输入的数值不正确,请重新输入!\n");}while(i!=0);}void main(){CreateList();begin();}5.调试分析a.是如何解决的以及对设计与实现的回顾讨论和分析;调试过程中遇到的问题有在写调用函数是函数的形参的类型与实参的类型不一致我经常在很多地方符号丢失改进设想;直接将数值在调用的函数里定义、输入及输出避免在主函数里传实参值,这样就不易出错。
数据结构课程设计报告--链表
班级:姓名: 学号: 设计时间:《高级语言程序设计》课程设计报告一、应用程序的名称:链表二、应用程序的主题与设计目的:实现一个链表的建立、输出,并且完成节点的插入、删除操作。
三、应用程序简介: 1、基本结构A 、功能模块图B 、各模块流程图 (1)链表的建立:开辟一个新节点,使p1、P2指向它读入一个学生数据给p1所指的结点p 指向的节点并且p(3) 链表结点的删除(4)链表节点的插入2、基本内容:(源代码及注释) #include<stdio.h>#include<malloc.h>#define LEN sizeof(struct student) int n;struct student{int num;int score;struct student *next;};struct student *creat(void) /*定义函数,此函数带回一个指向链表头的指针*/{struct student *head;struct student *p1,*p2;n=0;p1=p2=(struct student *)malloc(LEN); /*开辟一个新单元*/ scanf("%d,%d",&p1->num,&p1->score);head=NULL;while(p1->num!=0){ n=n+1;if(n==1)head=p1;else p2->next=p1; /*把p1所指的结点连接在p2所指的结点后面*/p2=p1;p1=(struct student*)malloc(LEN);scanf("%d,%d",&p1->num,&p1->score);}p2->next=NULL;return(head); /*函数返回head的值,即链表中第一个节点的起始地址*/}void print(struct student*head){struct student*p;printf("\nNow,these %d records are:\n",n);p=head;if(head!=NULL)do{ printf("%d %d\n",p->num,p->score);p=p->next;}while(p!=NULL);}struct student*del(struct student*head,int num){struct student*p1,*p2;if(head==NULL){printf("\nlist null! \n");return head;}p1=head;while(num!=p1->num && p1->next!=NULL) /*p1指向的不是所要找的节点,且后有节点*/{ p2=p1;p1=p1->next;} /*p1后移一个节点*/if(num==p1->num) /*找到了*/{ if(p1==head)head=p1->next; /*若p1指向的首节点,把第二个节点地址赋予head*/else p2->next=p1->next; /*否则将下一个节点地址赋给前一节点地址*/printf("delete:%d\n",num);n=n-1;}else printf("%d not beed found!\n",num); /*找不到该节点*/ return(head);}struct student*insert(struct student*head,struct student*stud) {struct student*p0,*p1,*p2;p1=head; /*使p1指向第一个节点*/p0=stud; /*p0指向要插入的节点*/if(head==NULL) /*原来的链表是空表*/{head=p0;p0->next=NULL;} /*使p0指向的节点作为头结点*/else{while((p0->num>p1->num) && (p1->next!=NULL)){ p2=p1; /*使p2指向刚才p1指向的节点*/p1=p1->next; /*p1后移一个节点*/}if(p0->num<=p1->num){if(head==p1)head=p0; /*插到原来第一个节点之前*/else p2->next=p0; /*插到p2指向的节点之后*/ p0->next=p1;}else{ p1->next=p0;p0->next=NULL;} /*插到最后的节点之后*/}n=n+1; /*节点数加1*/return(head);}void main() /*作主调函数*/{ struct student *head,stu;long del_num;printf("input records:\n");head=creat(); /*建立链表,返回头指针*/print(head); /*输出全部节点*/printf("\ninput the deleted number:");scanf("%1d",&del_num); /*输入要删除的学号*/head=del(head,del_num); /*删除后链表的头地址*/print(head); /*输出全部节点*/printf("\ninput thr inserted record:"); /*输入要插入的节点*/ scanf("%d,%d",&stu.num,&stu.score);head=insert(head,&stu); /*插入一个节点,返回头结点地址*/ print(head); /*输出全部节点*/}四、主要运行界面的介绍:(在vc环境下)1、连接运行后,输入数据(以两组为例),组之间以逗号间隔,最后以数字0结束。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构课程设计实验报告
实验一链表部分选题为:2.4.3—城市链表
1、需求分析
(1)创建一个带有头结点的单链表。
(2)结点中应包含城市名和城市的位置坐标。
(3)对城市链表能够利用城市名和位置坐标进行有关查找、插入、删除、更新等操作。
(4)能够对每次操作后的链表动态显示。
2、概要设计
为了实现以上功能,可以从以下3个方面着手设计。
(1)主界面设计
为了实现城市链表相关操作功能的管理,设计一个含有多个菜单项的主控菜单子程序以链接系统的各项子功能,方便用户使用本程序。
本系统主控菜单运行界面如下所示。
(2)存储结构设计
本系统主要采用链表结构类型来表示存储在“城市链表”中的信息。
其中链表结点由4个分量组成:城市名name、城市的横坐标posx、城市的纵坐标posy、指向下一个结点的指针next。
(3)系统功能设计
本程序设计了9个功能子菜单,其描述如下:
①建立城市链表。
由函数creatLink()实现。
该功能实现城市结点的输
入以及连接。
②插入链表记录。
由函数insert()实现。
该功能实现按坐标由小到大
的顺序将结点插入到链表中。
③查询链表记录。
由searchName()函数和searchPos()函数实现。
其中searchName()实现按照城市名查询的操作,searchPos()实现按照城市坐标查询的操作。
④删除链表记录。
由delName()函数和delPos()函数实现。
其中
delName()函数实现按照城市名删除的操作,delPos()函数实现按照城市
坐标删除的操作。
⑤ 显示链表记录。
由printList ()函数实现。
该功能实现格式化的链
表输出操作,可以显示修改后的链表状态。
⑥ 更新链表信息。
由update ()函数实现。
该功能实现按照城市名更
新城市的坐标信息。
⑦ 返回城市坐标。
由getPos ()函数实现。
该功能实现给定一个已存
储的城市,返回其坐标信息的操作。
⑧ 查看与坐标P 距离小于等于D 的城市。
由getCity ()函数实现。
该
功能实现返回与给定坐标P 距离小于等于D 的城市名称。
⑨ 退出链表系统。
由exit (0)实现。
3、 模块设计
(1)模块设计
本程序包含两个模块:主程序模块和链表操作模块。
其调用关系如下图所示:
(2)系统子程序及功能设计
本系统共设置3个子程序,各程序的函数名及功能说明如下:
① Linklist creatLink()
城市名 2.按城市坐标 \t选择: ");
scanf("%d",&way);
if(way==1)
{
printf("\n请输入城市名:");
scanf("%s",name);
flag=searchName(L,name);
if(flag==0) printf("无此城市记录,查找失败!\n");
}
else if(way==2)
{
printf("请输入横坐标x: ");
scanf("%d",&px);
printf("请输入纵坐标y: ");
scanf("%d",&py);
flag=searchPos(L,px,py);
if(flag==0) printf("无此城市记录,查找失败!\n");
}
else printf("城市链表中无记录!\n");
}
break;
}
else printf("链表中无记录!\n");
break;
}
case 4:城市名称 2. 按城市坐标 \t选择: ");
scanf("%d",&way);
if(way==1)
{
printf("请输入城市名称: ");
scanf("%s",name);
flag=delName(L,name);
if(flag)
{
printf("删除%s城市后:\n",name);
printList(L);
}
else printf("无该名字的城市,删除失败!\n");
}
else if(way==2)
{
printf("请输入横坐标x: ");
scanf("%d",&px);
printf("请输入纵坐标y: ");
scanf("%d",&py);
flag=delPos(L,px,py);
if(flag)
{
printf("删除坐标为(%d,%d)的城市后:\n",px,py);
printList(L);
}
else printf("无该坐标的城市,删除失败!\n");
}
else printf("ERROR!!\n");
break;
}
case 5:xe”。
(2)进入本系统后,可以选择菜单功能项,首先选择功能1建立城市链表的基本数据后方可进行2-8的功能。
(3)在查询和删除链表记录中,均可以根据需要按照两种方式执行链表操作,一种是按照城市的名称,一种则是按照城市的坐标实现。