城市链表的实验报告

合集下载

城市链表实验报告书

城市链表实验报告书

学生课程实验报告书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已存在。

链表的实验报告

链表的实验报告
{
front->next=alist.front->next;
cout<<"复制构造函数"<<endl;
}
//touchafa
template<class T>
linklist<T>::linklist(T a[],int n)
{
front=new Node<T>;
front->next=NULL;
找到要插入的结点的前一个结点新结点的指针域指向p然后p前面的结点指向这个新的结点这样这个新的结点就插入到了链表里面3代码的时间复杂度
数据结构实验报告
1.
2.
2.1
2.2
2.3
算法一:
template<class T>
linklist<T>::linklist(T a[],int n)
{
front=new Node<T>;
T x=q->data;
delete q;
return x;
}
[1]算法功能:删除链表中的某个元素
[2]思想:删除就是先找到要删除的元素的前面的元素,然后前面的这个结点直接指向这个结点的下一个结点,然后再把这个指针删除。
[3]时间复杂度:O(n)
[4]代码逻辑:
1.从第一个结点开始,查找第i-1个元素,设为P指向该结点,如果查找失败则抛出异常
front->next=NULL;
for(int i=n-1;i>=0;i--)
{
Node<T>*s=new Node<T>;
s->data=a[i];

城市链表课程设计

城市链表课程设计

湖南商学院《城市链表》课程设计(实习)报告题目姓名: 彭应品学号: 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.顺序表的定义
(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)

链表基本操作实验报告

链表基本操作实验报告
void LinkedListInsert(LinkedList L,int i,ElemType x) {LinkedList p,s; int j; j=1;p=L;
while(p&&j<i) {p=p->next;j++;} if(p==NULL||j>i)
printf("插入位置不正确\n"); else{s=(LNode *)malloc(sizeof(LNode));
{printf("%d ",p->data); p=p->next;} } printf("\n"); }
int LinkedListLength (LinkedList L) {LinkedList p;
int j; p=L->next; j=0; while(p!=NULL)
{j++;p=p->next;} return j; }
8.向链表中插入元素
插入元素之后的链表 9.从链表中删除元素
删除位置为 6 的元素(是 3)
10.清空单链表
五、 实验体会
经过这次单链表基本操作实验,自己的编程能力有了进一步的提高,认识到自 己以前在思考一个问题上思路不够开阔,不能灵活的表达出自己的想法,虽然在 打完源代码之后出现了一些错误,但是经过认真查找、修改,最终将错误一一修 正,主要是在写算法分析的时候出现了障碍,经过从网上查找资料,自己也对程 序做了仔细的分析,对单链表创建、插入、删除算法画了详细的 N-S 流程图。
r=L; r 指向头结点
使用 malloc 函数动态分配存储空间,指针 p 指向新开辟的结点,并将元素存
放到新开辟结点的数据域,

链表实验报告总结

链表实验报告总结

篇一:链表实验报告数据结构实验报告姓名;方钢学号:20105567 专业:电子商务班级: 10-1班指导教师:实验时间:实验地点:新区实验楼4楼(实验题目)单链表实验1.实验内容和要求1.1实验要求①本次实验中的链表结构均为带头结点的单链表;②链表结构定义,算法实现放入库文件“linklist.h”;运算和变量命名直观易懂,并有相应的注释1.2实验内容&lt;1&gt;求链表中第i个结点的指针(函数),若不存在,则返回null。

&lt;2&gt;在第i 个结点前插入值为x的结点。

&lt;3&gt;删除链表中第i个元素结点。

&lt;4&gt;在一个递增有序的链表l中插入一个值为x的元素,并保持其递增有序特性。

&lt;5&gt;将单链表l中的奇数项和偶数项结点分解开(元素值为奇数、偶数),申请2个头结点,把分开的奇数项和偶数项分别链接到这2个头结点上,然后再将这两个新链表同时输出在屏幕上,并保留原链表的显示结果,以便对照求解结果。

&lt;6&gt;求两个递增有序链表l1和l2中的公共元素,并以同样方式连接成链表l3。

2.实验目的2.1 理解线性表的链式存储结构。

2.2熟练掌握单链表结构及有关算法的设计。

2.3根据具体问题的需要,设计出合理的表示数据的链表结构,并设计相关算法。

3.数据结构设计&lt;1&gt;求链表中第i个结点的指针(函数),若不存在,则返回null。

实验代码node *l,*p;int i; createnode(*&amp;l); //尾插法创建一个链表,cout&lt;&lt;链表包含:&lt;&lt;endl;p=l-&gt;next; while(p){cout&lt;&lt;p-&gt;data&lt;&lt;,;p=p-&gt;next; }cout&lt;&lt;endl;cout&lt;&lt;请输入待求元素序号:;cin&gt;&gt;i; locatenode (l, i, &amp;p );if(p!=null)cout&lt;&lt;序号&lt;&lt;i&lt;&lt;的元素值为:&lt;&lt;p-&gt;data&lt;&lt;endl;elsecout&lt;&lt;null&lt;&lt;endl;destroylist(l); //销毁链表,释放heap内存_crtdumpmemoryleaks(); //debug 模式下检测是否内存泄漏测试截图&lt;2&gt;在第i个结点前插入值为x的结点。

链表实验报告总结doc

链表实验报告总结doc

链表实验报告总结篇一:顺序表,链表总结实验报告实验报告实验目的:学生管理系统(顺序表)实验要求:1.建表2.求表长3.插入4.查找5.删除6.列表7.退出源程序:#include#include#include#define MaxSize 1000typedef struct{char xh[40];char xm[40];int cj;}DataType; //学生的结构typedef struct {DataType data[MaxSize]; //定义表的数据类型int length; //数据元素分别放置在data[0]到data[length-1]当中} SqList; //表的结构void liebiao(SqList *L)//{int k,n;char q;printf("请输入,输入学生的个数:\n");fflush(stdin);scanf("%d",&n);for(k=0;k {printf("请输入学生学号\n");scanf("%s",L->data[k].xh);printf("请输入学生名字\n");scanf("%s",L->data[k].xm);printf("请输入学生成绩\n");scanf("%d",&L->data[k].cj); 建立表格}L->length=n;}void qb(SqList *L) //全部输出{int k,w;for(k=0;klength;k++){w=k+1;printf("第%d位学生:",w);printf("%s %s%d\n",L->data[k].xh,L->data[k].xm,L->d ata[k].cj);}}int cr(SqList *L,DataType *xs,int i) //插入信息{int j;if(L->length==MaxSize){printf("没有!");return 0;else if((iL->length)){printf("程序溢出,不符合");return 0;}else{for(j=L->length-1;j>=i;j--){strcpy(L->data[j+1].xh,L->data[j].xh); strcpy(L->data[j+1].xm,L->data[j].xm);L->data[j+1].cj=L->data[j].cj;}strcpy(L->data[i].xh,xs->xh);strcpy(L->data[i].xm,xs->xm);L->data[i].cj=xs->cj;L->length=L->length+1;}return 0;}int cz(SqList *L) //查找信息char xh[40];char xm[40];int cj;int i=0,u;printf(" 1、按学号查询\n"); printf(" 1、按姓名查询\n"); printf(" 1、按成绩查询\n"); printf("请选择:");fflush(stdin);scanf("%d",&u);if (u==1){printf("请输入要查找学生的学号:");scanf("%s",xh);for(i=0;ilength;i++){篇二:单链表的实验报告辽宁工程技术大学上机实验报告篇三:单链表实验报告实验一线性表基本操作的编程实现--线性表在链表存储下的主要操作实现班级:T523-1 姓名:王娟学号:33完成日期:XX.04.04地点:5502学时:2学时一、需求分析【实验目的】通过本次实验,对课堂上线性表的知识进行巩固,进一步熟悉线性表的链接存储及相应的基本操作;并熟练掌握VC++ 6.0操作平台,学会调试程序,以及编写电子实验报告【实验要求】编写线性表的基本操作,有构造线性表,线性表的遍历,插入,删除,查找,求表长等基本功能,在此基础上能够加入DOS下的图形界面以及学会文件的操作等功能,为以后的学习打下基础。

实验链表实验报告

实验链表实验报告

实验链表实验报告一、实验目的本次实验的主要目的是深入理解链表这种数据结构的概念、特点和操作方法,并通过实际编程实现来提高对链表的应用能力。

二、实验环境本次实验使用的编程语言为C++,开发工具为Visual Studio 2019。

三、实验原理链表是一种常见的数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。

与数组不同,链表的内存分配是动态的,并且可以方便地进行插入和删除操作,而不需要移动大量的元素。

链表分为单向链表、双向链表和循环链表等多种类型。

在本次实验中,我们主要实现单向链表。

单向链表的节点结构通常包含数据域和指针域。

数据域用于存储节点的数据,指针域用于指向下一个节点。

通过遍历链表的指针,可以访问链表中的每个节点。

四、实验内容1、链表节点的定义```cppstruct ListNode {int data;ListNode next;ListNode(int x) : data(x), next(NULL) {}};```2、链表的创建```cppListNode createList(){ListNode head = NULL;ListNode tail = NULL;int num;cout <<"请输入链表中的数字(输入-1 结束):";cin >> num;while (num!=-1) {ListNode newNode = new ListNode(num);if (head == NULL) {head = newNode;tail = newNode;} else {tail>next = newNode;tail = newNode;}cin >> num;}return head;}```3、链表的遍历```cppvoid traverseList(ListNode head) {ListNode curr = head;while (curr!= NULL) {cout << curr>data <<"";curr = curr>next;}cout << endl;}```4、链表的插入```cppvoid insertNode(ListNode& head, int position, int value) {ListNode newNode = new ListNode(value);if (position == 0) {newNode>next = head;head = newNode;return;}ListNode curr = head;int count = 0;while (curr!= NULL && count < position 1) {curr = curr>next;count++;}if (curr == NULL) {cout <<"插入位置超出链表长度" << endl; return;}newNode>next = curr>next;curr>next = newNode;}```5、链表的删除```cppvoid deleteNode(ListNode& head, int position) {if (head == NULL) {cout <<"链表为空,无法删除" << endl; return;}if (position == 0) {ListNode temp = head;head = head>next;delete temp;return;}ListNode curr = head;ListNode prev = NULL;int count = 0;while (curr!= NULL && count < position) {prev = curr;curr = curr>next;count++;}if (curr == NULL) {cout <<"删除位置超出链表长度" << endl; return;}prev>next = curr>next;delete curr;}```五、实验结果通过对上述链表操作函数的调用,我们成功地创建、遍历、插入和删除了链表中的节点。

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

学院数据结构实验报告1.实验题目将若干城市的信息,存入一个带头结点的单链表。

结点中的城市信息包括:城市名,城市的位置坐标。

要求能够利用城市名和位置坐标进行有关查找、插入、删除、更新等操作。

[基本要求](1)给定一个城市名,返回其位置坐标;(2)给定一个位置坐标P和一个距离D,返回所有与P的距离小于等于D的城市。

2.需求分析1、根据题目,我们认为我们所编的程序需要实现以下功能:(1)、创建一个城市链表,能够输入城市信息,即城市名和城市位置坐标;(2)、能够根据城市名查询其位置坐标;(3)、根据离中心坐标距离查询城市名;(4)、能够插入城市信息;(5)、能够删除城市信息;(6)、能够更新城市信息;(7)、执行完毕,退出程序。

2、演示程序以用户和计算机的对话方式执行,即在在计算机终端上显示“提示信息”之后,由用户在键盘上输入演示程序中规定的运算命令;输入相应的数据(滤去输入中非法字符),运算结果显示在其后。

3、程序执行的命令包括:(1)构造函数1;(2)构造函数2;(3)构造函数3;(4)构造函数4;(5)构造函数5;(6)构造函数6;(7)构造函数7。

4、`测试数据1)、输入”1”调用函数Create();新建城市信息:fujian(1.1,2.2) beijing(3.3,4.4) shanghai(5,6) tianjing(7,8) nanjing(910,910) hangzhou(11,12)输入END键,退出.2)、输入”2”,调用函数FindCity();当键入城市名时,返回其城市坐标: 如:键入城市名”fujian”,返回坐标:1.10.2.203)、输入“3”调用函数FindCityDistance();如:当给定坐标P(3.3,4.4)时,距离5时,就输出所有与P的距离小于等于5的城市信息。

4)、输入”4”,调用函数Insert().进行插入新城市信息操作;如:插入城市信息:hainan(5,8),当进行查找时,能看到插入城市的信息.证明插入成功.5)、输入”5”,调用函数Delete(),进行删除操作:6)、输入”6”,调用函数UpdateCity(Store),进行更新操作;7)、输入”7”,退出.3.概要设计1)为了实现上述程序功能,需要定义单链表的抽象数据类型:1、为实现上述程序功能,应以有序链表表示集合。

ADT List{数据对象:D={,1,2,}i iElemSet i a a ∈=≥…,n,n 0 数据关系:111{,,,2,}i i i i D i a a a a R --=〈〉∈=…,n基本操作:InitList(&L)操作结果:构造一个空的线性表L ,即初始化表L 。

ListLength (L )初始条件:线性表L 已存在。

操作结果:求线性表L 中数据元素个数,即求表长。

GetElem(L ,i ,&e )初始条件:线性表L 已存在,1≤i ≤ListLength (L )操作结果:用e 返回L 中第i 个数据元素的值。

LocateElem (L,e,compare())初始条件:线性表L 已存在,compare()是数据元素判定函数。

操作结果:返回L 中第一个与e 满足关系compare()的数据元素的位置。

若L 中不存在这样的数据元素 ,则返回值0。

ListInsert(&L,i,e)初始条件:线性表L 已存在,1<=i<=ListLength(L)+1操作结果:在L 中第i 个位置之前插入新的数据元素e,L 的长度加1。

ListDelete(&L,i,&e)初始条件:线性表L 已存在且非空,1<=i<=ListLength(L)操作结果:删除L 的第i 个数据元素,并用e 返回其值,L 的长度减1。

}ADT List2)本程序包含8个函数调用模块typedef struct CITYLIST CityList;void Init(CityList *LHead);void Insert(CityList *LHead);void Delete(CityList *LHead);void Create(CityList *LHead);void FindCity(CityList* LHead);void FindCityDistance(CityList* LHead);void UpdateCity(CityList* L4.详细设计实现概要设计中定义的所有的数据类型,对每个操作给出伪码算法。

对主程序和其他模块也都需要写出伪码算法。

一.源程序文件名清单:Stdlib.H //头文件Stdio.H //主程序String.H //字符串处理函数的头文件Malloc.H //动态存储分配实现单元二.结构类型构造typedef struct CityList{char CityName[10];float X,Y;struct CityList *Next;}CityList, *LHead; // 结点类型,指针类型三.主程序模块:Void main (){初始化Switch(){接受命令;处理命令;}}四.基本函数操。

1. void Init(CityList *LHead){LHead->Next = NULL;} //建立一个带头结点的单链线性表,LHead指向头结点。

2.void Insert(CityList *LHead){CityList* newNode; //定义指针结构为cityList型char m;newNode = (CityList*)malloc(sizeof(CityList)); //生成新结点if(newNode == NULL) //验证空间申请是否成功{printf("内存分配失败\n");return; //若分配内存不成功,则返回继续分配。

}printf("请输入城市名\n");scanf("%s",newNode->CityName);//指针的数据域printf("请输入城市坐标x,y\n");scanf("%f%c%f",&newNode->X,&m,&newNode->Y); //将城市信息填入新节点中while(LHead->Next != NULL){LHead = LHead->Next;}//如果非空,HLead指针的位置向后移newNode->Next = LHead->Next;LHead->Next = newNode;} //将新节点插入链表3. void Delete(CityList *LHead){char delCity[10];printf("请输入要删除的城市名\n");scanf("%s",delCity);while(strcmp(LHead->Next->CityName,delCity ))//从LHead指向得头结点的下一个结点开判断结点中的城市名与输入城市名是否相等。

{LHead = LHead->Next; //不相等则指针LHead下移,继续查找}LHead ->Next = LHead->Next->Next; //相等则删除此节点}4. void Create(CityList *LHead){char sign[20]; //定义输入信息类型及长度printf("输入END退出,输入其余值继续\n"); //当输入END时,在任意输入,则退出此操作scanf("%s",sign);while(strcmp(sign,"END")) ////当输入END时,再任意输入,则退出此操作{Insert(LHead);printf("输入END退出,输入其余值继续\n");scanf("%s",sign);}}5. void FindCity(CityList* LHead){char CityName[30];int j=0;printf("请输入您要搜索的城市名\n");scanf("%s",CityName);while(LHead->Next != NULL && strcmp(LHead->Next->CityName,CityName)){LHead = LHead->Next;}if(LHead->Next == NULL){printf("您要搜索的城市不存在\n");return;}printf("城市坐标为%.2f,%.2f\n",LHead->Next->X,LHead->Next->Y);}6. void UpdateCity(CityList* LHead){char CityName[10];printf("请输入您要更新的城市名\n");scanf("%s",CityName);while(strcmp(LHead->Next->CityName,CityName)) //从LHead指向得头结点的下一个结点开判断结点中的城市名与输入城市名是否相等。

{LHead = LHead->Next; // 当不相等则指针LHead下移,继续查找}printf("请输入城市新信息:\n");printf("请输入城市新名\n");scanf("%s",LHead->Next->CityName);printf("请输入城市新坐标\n");scanf("%f",&LHead->Next->X);scanf("%f",&LHead->Next->Y);} //输入城市新信息7. void FindCityDistance(CityList* LHead){char m;float x;float y;float distance;printf("请输入中心坐标x,y\n");scanf("%f%c%f",&x,&m,&y);printf("请输入距离:");scanf("%f",&distance);LHead = LHead->Next;while(LHead != NULL){if((x-LHead->X)*(x-LHead->X) + (y-LHead->Y)*(y-LHead->Y) <= distance*distance){printf("城市名为%s\n",LHead->CityName);printf("城市坐标为%.2f,%.2f\n",LHead->X,LHead->Y);}LHead = LHead->Next;}}五.主函数void main(){CityList* LHead;CityList* Store;char choice[3] = {1,2,3};LHead = (CityList*)malloc(sizeof(CityList));Init(LHead);//建立空表Store = LHead;while(strcmp(choice,"7")){ //当所选择等于7时,进行以下操作printf("***************************\n");printf("***************************\n");printf(" 欢迎使用本系统\n");printf("***************************\n");printf("***************************\n");printf("1.创建城市链表\n");printf("2.根据城市名查询城市\n");printf("3.根据离中心坐标距离查询城市\n");printf("4.插入新城市信息\n");printf("5.删除城市信息\n");printf("6.更新城市信息\n");printf("7.退出\n"); //以上相当于一个选择菜单,皆为提示信息printf("==========================\n");printf("请输入:");scanf("%s",&choice);switch(choice[0]){case '1': //相当于选择1Create(Store); //构造并创建城市信息链表break;case '2':FindCity(Store);//根据城市名查找城市位置break;case '3':FindCityDistance(Store);//根据所给中心坐标和距离值,返回小于等于所给距离值得节点信息。

相关文档
最新文档