当前位置:文档之家› 2.1 线性表及其实现

2.1 线性表及其实现

数据结构实验报告 实验一 线性表链式存储运算的算法实现

昆明理工大学信息工程与自动化学院学生实验报告 (201 —201 学年第一学期) 课程名称:数据结构开课实验室:年月日年级、专业、班学号姓名成绩 实验项目名称线性表链式存储运算的算法实现指导教师 教 师 评语教师签名: 年月日 一.实验内容: 线性表链式存储运算的算法实现,实现链表的建立、链表的数据插入、链表的数据删除、链表的数据输出。 二.实验目的: 1.掌握线性表链式存储结构的C语言描述及运算算法的实现; 2.分析算法的空间复杂度和插入和删除的时间复杂度; 3.总结比较线性表顺序存储存储与链式存储的各自特点。 三.主要程序代码分析: LinkList creatListR1() //用尾插入法建立带头结点的单链表 { char *ch=new char(); LinkList head=(LinkList)malloc(sizeof(ListNode)); //生成头结点*head ListNode *s,*r,*pp; r=head; //尾指针初值指向头结点 r->next=NULL; scanf("%s",ch); //读入第一个结点的值 while(strcmp(ch,"#")!=0) { //输入#结束

pp=LocateNode(head,ch); if(pp==NULL) { s=(ListNode *)malloc(sizeof(ListNode)); //生成新的结点*s strcpy(s->data,ch); r->next=s; //新结点插入表尾 r=s; //尾指针r指向新的表尾 r->next=NULL; } scanf("%s",ch); //读入下一个结点的值 } return head; //返回表头指针 } int Insert(ListNode *head) //链表的插入 { ListNode *in,*p,*q; int wh; in=(ListNode *)malloc(sizeof(ListNode));in->next=NULL; //生成新结点p=(ListNode *)malloc(sizeof(ListNode));p->next=NULL; q=(ListNode *)malloc(sizeof(ListNode));q->next=NULL; scanf("%s",in->data); //输入插入的数据 scanf("%d",&wh); //输入插入数据的位置 for(p=head;wh>0;p=p->next,wh--); q=p->next; p->next=in; in->next=q; } void DeleteList(LinkList head,char *key) //链表的删除 { ListNode *p,*r,*q=head; p=LocateNode(head,key); //按key值查找结点的 if(p==NULL) exit(0); //若没有找到结点,退出 while(q->next!=p) //p为要删除的结点,q为p的前结点q=q->next; r=q->next; q->next=r->next; free(r); //释放结点*r } 四.程序运行结果:

实验一 线性表的基本操作实现及其应用

实验一线性表的基本操作实现及其应用 一、实验目的 1、熟练掌握线性表的基本操作在两种存储结构上的实现。 2、会用线性链表解决简单的实际问题。 二、实验内容 题目一、该程序的功能是实现单链表的定义和操作。该程序包括单链表结构类型以及对单链表操作的具体的函数定义和主函数。其中,程序中的单链表(带头结点)结点为结构类型,结点值为整型。单链表操作的选择以菜单形式出现,如下所示: please input the operation: 1.初始化 2.清空 3.求链表长度 4.检查链表是否为空 5.检查链表是否为满 6.遍历链表(设为输出元素) 7.从链表中查找元素 8.从链表中查找与给定元素值相同的元素在表中的位置 9.向链表中插入元素 10. 从链表中删除元素 其他键退出。。。。。 其中黑体部分必做 题目二、约瑟夫环问题: 设编号为1,2,3,……,n的n(n>0)个人按顺时针方向围坐一圈,每个人持有一个正整数密码。开始时任选一个正整数做为报数上限m,从第一个人开始顺时针方向自1起顺序报数,报到m时停止报数,报m的人出列,将他的密码作为新的m值,从他的下一个人开始重新从1报数。如此下去,直到所有人全部出列为止。令n最大值取30。要求设计一个程序模拟此过程,求出出列编号序列。 struct node (一)

1.进入选择界面后,先选择7,进行插入: 2.选择4,进行遍历,结果为: 3.选择2,得出当前链表长度.

4.选择3,得出当前链表为. 5.选择分别选择5、6进行测试.

6.选择8,分别按位置和元素值删除. 7.选择9,或非1-8的字符,程序结束.

实验1 线性表及其应用

实验1 线性表及其应用 题目1 顺序表的建立与基本操作 一、实验目的 1. 通过实验,掌握include命令及头文件的使用 2. 通过实验,掌握顺序表的建立与输出 3. 通过实验,掌握顺序表的基本操作 二、实验内容 1. 练习顺序表的建立与输出 2. 练习顺序表的基本操作 三、实验前的准备 1. 理解并掌握顺序表的存储结构、基本操作 2. 复习include命令的使用 3. 预习实习指导书,并准备相关的程序清单 四、实验步骤与方法 (1)建立自己的工作目录 (2)在当前文件夹下建立函数结果状态代码的定义文件Status.h(课本p10(1)预定义常量和类型)和数据结构数据文件SqList.h(内容包括顺序表的描述、顺序表建立、顺序表的查询、插入、删除与输出等功能。) (3)理解并运行下列程序: #include #include #include "Status.h" #include "SqList.h" void main() { SqList a; int i, k; InitList_Sq(a); printf("please input the data ,end of -99\n"); k = 0; scanf("%d",&i); while (i != -99) { a.elem[k] = i; k++; scanf("%d",&i); } a.length = k; printf("\n output the data:"); for (i = 0; i<=a.length-1; i++) printf("%d ",a.elem[i]); printf("\n"); } (4)编写算法,通过调用SqList.h中的相关函数,完成顺序表中指定位置数据的输出、元素的插入和删除 题目2 链表的操作

实验1__线性表的应用

实验一线性表的应用 一、实验教学目的 1、熟悉将算法转换成程序代码的过程。 2、了解顺序表的逻辑结构特性,熟练掌握顺序表存储结构的C语言描述方法。 3、熟悉链表数据结构的定义和插入、删除等基本操作,会使用链表的基本操作解决一些实际问题 二、实验教学内容 1、实验题目 (1)用C语言数组实现顺序表,并在顺序表上实现:①在第3个位置插入666; ②将第8个元素删除;③在顺序表中查找值为65的元素。 (2)已知有两个多项式Pn(x)和Qm(x),基于链表设计算法实现Pn(x)+Qm(x)运算,而且不重新开辟存储空间。 ⑶基于链表编程实现多项式乘法运算 2、实验要求: (1)要求用静态分配的一维数组和动态分配的一维数组来完成实验题目。分析静态分配的一维数组和动态分配的一维数组在顺序表基本操作实现上的共同点和区别。 (2)熟悉链表及其运算的实现。 ①自己编写实现函数; ②对所编写的算法进行时间复杂度分析。 ⑶实验⑴、⑵必做,实验⑶选做。 3、实验预备知识 (1)复习C语言相关知识(如:结构体、用typedef自定义类型、函数)。 (2)阅读顺序表与链表的类型定义和相应的插入、删除、查找等基本操作。 4、实验环境

(1)一台运行 Windows 2000/XP 操作系统的计算机。 (2)选用turbo c、visual c++、delphi、c++ builder 或visual basic等任何一种语言。 5、实验说明 (1)顺序存储定义 #define MAXSIZE 100/*表中元素的最大个数*/ typedef int datatype; /*元素类型*/ typedef struct {datatype data[MAXSIZE]; /*静态线性表*/ int last; /*表的实际长度*/ }seqlist; /*顺序表的类型名*/ (2)建立顺序表时可利用随机函数自动产生数据。 (3)注意问题 ①插入、删除时元素的移动原因、方向及先后顺序。 ②不同的函数形参与实参的传递关系。 (4)链表类型定义 typedef int datatype;/*元素类型*/ typedef struct node {datatype data; struct node *next; }lnode,*linklist;/*单链表的类型定义*/ (5)为了算法实现简单,最好采用带头结点的单向链表。 (6)注意问题 ①重点理解链式存储的特点及指针的含义。 ②注意比较顺序存储与链式存储的各自特点。 ③注意比较带头结点、无头结点链表实现插入、删除算法时的区别。 ④单向链表的操作是数据结构的基础,一定要注意对这部分的常见算法的理解。 三、实验内容和实验步骤:(由学生填写) 四、实验用测试数据和相关结果分析:(由学生填写) 五、实验总结:(由学生填写) 六、程序参考模板

数据结构实验一题目一线性表实验报告

数据结构实验报告 实验名称:实验1——线性表 学生姓名: 班级: 班内序号: 学号: 日期: 1.实验要求 1、实验目的:熟悉C++语言的基本编程方法,掌握集成编译环境的调试方法 学习指针、模板类、异常处理的使用 掌握线性表的操作的实现方法 学习使用线性表解决实际问题的能力 2、实验内容: 题目1: 线性表的基本功能: 1、构造:使用头插法、尾插法两种方法 2、插入:要求建立的链表按照关键字从小到大有序 3、删除 4、查找 5、获取链表长度 6、销毁 7、其他:可自行定义 编写测试main()函数测试线性表的正确性。 2. 程序分析 2.1 存储结构 带头结点的单链表

2.2 关键算法分析 1.头插法 a、伪代码实现:在堆中建立新结点 将x写入到新结点的数据域 修改新结点的指针域 修改头结点的指针域,将新结点加入链表中b、代码实现: Linklist::Linklist(int a[],int n)//头插法 {front=new Node; front->next=NULL; for(int i=n-1;i>=0;i--) {Node*s=new Node; s->data=a[i]; s->next=front->next; front->next=s; } } 2、尾插法

a、伪代码实现:a.在堆中建立新结点 b.将a[i]写入到新结点的数据域 c.将新结点加入到链表中 d.修改修改尾指针 b、代码实现: Linklist::Linklist(int a[],int n,int m)//尾插法 {front=new Node; Node*r=front; for(int i=0;idata=a[i]; r->next=s; r=s; } r->next=NULL; } 时间复杂度:O(n) 3、按位查找 a、伪代码实现: 初始化工作指针p和计数器j,p指向第一个结点,j=1 循环以下操作,直到p为空或者j等于1 b1:p指向下一个结点 b2:j加1 若p为空,说明第i个元素不存在,抛出异常 否则,说明p指向的元素就是所查找的元素,返回元素地址 b、代码实现 Node* Linklist::Get(int i)//得到指向第i个数的指针 {Node*p=front->next; int j=1; while(p&&j!=i)//p非空且j不等于i,指针后移 {p=p->next; j++;

数据结构_实验1_线性表的基本操作

实验1 线性表的基本操作 一、需求分析 目的: 掌握线性表运算与存储概念,并对线性表进行基本操作。 1.初始化线性表; 2.向链表中特定位置插入数据; 3.删除链表中特定的数据; 4.查找链表中的容; 5.销毁单链表释放空间; 二、概要设计 ●基础题 主要函数: 初始化线性表InitList(List* L,int ms) 向顺序表指定位置插入元素InsertList(List* L,int item,int rc)删除指定元素值的顺序表记录DeleteList1(List* L,int item) 删除指定位置的顺序表记录 DeleteList2(List* L,int rc) 查找顺序表中的元素 FindList(List L,int item) 输出顺序表元素OutputList(List L) 实验步骤: 1,初始化顺序表 2,调用插入函数 3,在顺序表中查找指定的元素 4,在顺序表中删除指定的元素 5,在顺序表中删除指定位置的元素 6,遍历并输出顺序表 ●提高题

要求以较高的效率实现删除线性表中元素值在x到y(x和y自定义)之间的所有元素 方法: 按顺序取出元素并与x、y比较,若小于x且大于y,则存进新表中。 编程实现将两个有序的线性表进行合并,要求同样的数据元素只出现一次。 方法: 分别按顺序取出L1,L2的元素并进行比较,若相等则将L1元素放进L中,否则将L 1,L2元素按顺序放进L。 本程序主要包含7个函数 主函数main() 初始化线性表InitList(List* L,int ms) 向顺序表指定位置插入元素InsertList(List* L,int item,int rc)删除指定元素值的顺序表记录DeleteList1(List* L,int item) 删除指定位置的顺序表记录 DeleteList2(List* L,int rc) 查找顺序表中的元素 FindList(List L,int item) 输出顺序表元素OutputList(List L) 提高题的程序 void Combine(List* L1,List* L2,List* L) void DeleteList3(List* L,int x,int y) 二、详细设计 初始化线性表InitList(List* L,int ms) void InitList(List* L,int ms) { L->list=(int*)malloc(LIST_INIT_SIZE*sizeof(int)); L->size=0; L->MAXSIZE=LIST_INIT_SIZE;

数据结构实验一题目一线性表实验报告

北京邮电大学电信工程学院 数据结构实验报告 实验名称:实验1——线性表 学生姓名: 班级: 班内序号: 学号: 日期: 1.实验要求 1、实验目的:熟悉C++语言的基本编程方法,掌握集成编译环境的调试方法 学习指针、模板类、异常处理的使用 掌握线性表的操作的实现方法 学习使用线性表解决实际问题的能力 2、实验内容: 题目1: 线性表的基本功能: 1、构造:使用头插法、尾插法两种方法 2、插入:要求建立的链表按照关键字从小到大有序 3、删除 4、查找 5、获取链表长度 6、销毁 7、其他:可自行定义 编写测试main()函数测试线性表的正确性。 2. 程序分析 2.1 存储结构 带头结点的单链表

2.2 关键算法分析 1.头插法 a、伪代码实现:在堆中建立新结点 将x写入到新结点的数据域 修改新结点的指针域 修改头结点的指针域,将新结点加入链表中b、代码实现: Linklist::Linklist(int a[],int n)//头插法 {front=new Node; front->next=NULL; for(int i=n-1;i>=0;i--) {Node*s=new Node; s->data=a[i]; s->next=front->next; front->next=s; } } 2、尾插法

a、伪代码实现:a.在堆中建立新结点 b.将a[i]写入到新结点的数据域 c.将新结点加入到链表中 d.修改修改尾指针 b、代码实现: Linklist::Linklist(int a[],int n,int m)//尾插法 {front=new Node; Node*r=front; for(int i=0;idata=a[i]; r->next=s; r=s; } r->next=NULL; } 时间复杂度:O(n) 3、按位查找 a、伪代码实现: 初始化工作指针p和计数器j,p指向第一个结点,j=1 循环以下操作,直到p为空或者j等于1 b1:p指向下一个结点 b2:j加1 若p为空,说明第i个元素不存在,抛出异常 否则,说明p指向的元素就是所查找的元素,返回元素地址 b、代码实现 Node* Linklist::Get(int i)//得到指向第i个数的指针 {Node*p=front->next; int j=1; while(p&&j!=i)//p非空且j不等于i,指针后移 {p=p->next; j++;

201560140140--袁若飞--实验1:线性表的基本操作及其应用

数据结构 实验1:线性表的基本操作及其应用 班级:RB软工移151 学号:201560140140 姓名:袁若飞

实验一线性表 一、实验目的 1、帮助读者复习C++语言程序设计中的知识。 2、熟悉线性表的逻辑结构。 3、熟悉线性表的基本运算在两种存储结构上的实现,其中以熟悉链表的操作为侧重点。 二、实验内容 本次实验提供4个题目,每个题目都标有难度系数,*越多难度越大,题目一、二是必做题。题目三、题目四选作。 三、实验准备知识 1、请简述线性表的基本特性和线性表的几种基本操作的机制 ①答:线性表的基本特性是:对线性表中某个元素ai来说,称其前面的元素ai-1为ai的直接前驱,称其后前面的元素ai+1为ai的直接后继。显然,线性表中每个元素最多有一个直接前驱和一个直接后继。 ②答:线性表的几种基本操作的机制有六个: (1)初始化线性表initial_List(L)——建立线性表的初始结构,即建空表。这也是各种结构都可能要用的运算。 (2)求表长度List_length(L)——即求表中的元素个数。 (3)按序号取元素get_element(L,i)——取出表中序号为i的元素。(4)按值查询List_locate(L,x)——取出指定值为x的元素,若存在该元素,则返回其地址;否则,返回一个能指示其不存在的地址值或标记。 (5)插入元素List_insert(L,i,x)——在表L的第i个位置上插入值为x的元素。显然,若表中的元素个数为n,则插入序号i应满足1<=i<=n+1。(6)删除元素List_delete(L,i)——删除表L中序号为i的元素,显然,待删除元素的序号应满足1<=i<=n。 2、掌握线性表的逻辑结构。 3、掌握线性表的链式存储结构。 4、熟练掌握线性表的插入、删除等操作。

实验一线性表与应用(I)

姓名学号

ElemType data; //待插入元素 SqList L; //定义SqList类型变量 InitList_Sq(L); //初始化顺序表 printf("※1. 请输入所需建立的线性表的长度:"); scanf_s("%d", &LIST_MAX); printf("※2. 请录入数据:"); for (i = 0; i

实验一 线性表的基本操作

实验一线性表的基本操作 一、实验目的 1. 熟悉C/C++语言上机环境; 2. 掌握线性表的基本操作:查找、插入、删除等运算在顺序存储、链式存储结构上的运算。 二、实验环境 1. 装有Visual C++6.0的计算机。 2. 本次实验共计2学时。 三、实验内容 1. 建立顺序表,基本操作包括:初始化、建立顺序表、输出顺序表、判断是否为空、取表中第i个元素、查找、插入和删除。并在主函数中完成对各种函数的测试。 2. 设有两个非递增有序的线性表A和B,均已顺序表作为存储结构。编写算法实现将A表和B表合并成一个非递增有序排列的线性表(可将线性表B插入线性表A中,或重新创建线性表C)。 3. 建立单链表,基本操作包括:初始化、判断是否为空、取表中第i个元素、查找、插入和删除。并在主函数中完成对各种函数的测试。 四、源程序 #include #include #include #define MaxSize 50 typedef char ElemType; //-------存储结构---------- typedef struct { ElemType elem[MaxSize]; //存放顺序表中的元素 int length; //存放顺序表的长度 } SqList; //-------初始化线性表---------- void InitList(SqList *&L) //初始化线性表,构造一个空的线性表,并将长度设置为0 { L=(SqList *)malloc(sizeof(SqList)); L->length=0;

《数据结构》实验一 线性表及其应用

实验一线性表及其应用 一、实验目的 1.熟悉C语言的上机环境,进一步掌握C语言的结构特点。 2.掌握线性表的顺序存储结构的定义及C语言实现。 3.掌握线性表的链式存储结构——单链表的定义及C语言实现。 4.掌握线性表在顺序存储结构即顺序表中的各种基本操作。 5.掌握线性表在链式存储结构——单链表中的各种基本操作。 二、实验内容 1.顺序线性表的建立、插入及删除。 2.链式线性表的建立、插入及删除。 三、实验步骤 1.建立含n个数据元素的顺序表并输出该表中各元素的值及顺序表的长度。 2.利用前面的实验先建立一个顺序表L={21,23,14,5,56,17,31},然后在第i个位置插入元素68。 3.建立一个带头结点的单链表,结点的值域为整型数据。要求将用户输入的数据按尾插入法来建立相应单链表。 四、实现提示 1.由于C语言的数组类型也有随机存取的特点,一维数组的机内表示就是顺序结构。因此,可用C语言的一维数组实现线性表的顺序存储。 在此,我们利用C语言的结构体类型定义顺序表: #define MAXSIZE 1024 typedef int elemtype; /* 线性表中存放整型元素*/ typedef struct { elemtype vec[MAXSIZE]; int len; /* 顺序表的长度*/ }sequenlist; 将此结构定义放在一个头文件sqlist.h里,可避免在后面的参考程序中代码重复书写,另外在该头文件里给出顺序表的建立及常量的定义。 2. 注意如何取到第i个元素,在插入过程中注意溢出情况以及数组的下标与位序(顺序表中元素的次序)的区别。 3.单链表的结点结构除数据域外,还含有一个指针域。用C语言描述结点结构如下: typedef int elemtype; typedef struct node

实验1线性表及其应用

实验1 线性表及其应用 实验性质:验证性 实验学时:2学时 一、实验目的 1.掌握线性表的顺序存储结构在计算机的表示方法及其基本操作的实现; 2.掌握线性表的链式存储结构在计算机的表示方法及其基本操作的实现; 3.能够利用线性表结构对实际问题进行分析建模,利用计算机求解。 二、实验预备知识 1.复习C/C++语言相关知识(如:结构体的定义、typedef的使用、函数的定义、调用 及参数传递方式); 2.阅读并掌握顺序表与链表的类型定义及其查找、插入、删除等基本操作。 三、实验内容 1.理解并分别用顺序表、链表的操作运行下列程序: #include using namespace std; #include "Status.h" typedef int ElemType; #include "SqList.h" //用#include "LinkList.h"替换 void main() { SqList L; //用LinkList L;替换,与#include "LinkList.h"配合 int n,i; ElemType e; InitList(L); cout<<"\nL="; ListTraverse(L); cout<<"\n请设置将向线性表L中输入的元素个数:"; cin>>n; CreateList(L,n); cout<<"\nL="; ListTraverse(L); cout<<"\nL的表长为:"<>i; if(GetElem(L,i,e)) cout<<"\n第"<>e; if(i=LocateElem(L,e)) cout<<"\n元素"<

贵州大学数据结构实验1-线性表及应用

实验一线性表及应用 一、实验目的 1.复习C语言的上机环境,掌握C语言的基本结构; 2.会定义线性表的顺序存储结构和链表的存储结构; 3.熟悉对顺序表的一些基本操作和具体的函数定义。 4.掌握顺序表和单链表的存储结构及相关运算 5.掌握顺序表和单链表的基本应用 二、实验硬软件环境 硬件环境:赛扬433以上CPU,10GB以上硬盘,64MB以上内存 软件环境:DOS+Turbo C 2.0 或Borland C++ 3.1以上 Windowx 9X+VC++ 5.0以上 三、实验要求 1.认真阅读和掌握本实验内容所给的全部程序。 2.保存和打印出程序运行结果,并结合程序进行分析。 3.按照你对顺序表操作的需要,屏幕考贝运行结果到实验报告中。 4.撰写实验报告并准时上交 四、注意事项 在做第一次“数据结构”课程实验之前,要在硬盘上建立好自己的工作目录,专门用来存储你所做的实验程序及相关信息,以后每次做实验都采用这个目录。 本实验设计完全由老师设计,版权限本班同学使用,勿外传。 实验材料下载到本机后,请用winrar软件释放到你的电脑磁盘的“数据结构实验(张三)”文件夹中,形成如上图的文件夹结构。 上交实验报告时,请把“实验一”的所有内容(含实验报告)用winrar打包成.rar文件后一并交上来。上传名字为“实验一(张三).rar”

五、基本理论 线性表:线性表(linear list)是这样的数据对象,其实例形式为: (e1 , e2 ,... en ),其中n 是有穷自然数。e 是表中的元素,n 是表的长度。元素 i 可以被视为原子,因为它们本身的结构与线性表的结构无关。当n = 0 时,表为空;当n > 0时,e1是第一个元素,e n是最后一个元素,可以认为e l优先于e2,e 优先于e3,如此等等。除了这种优先关系之外,在线性表中不再有其他的结构。2 基本操作: ? 创建一个线性表。 ? 确定线性表是否为空。 ? 确定线性表的长度。 ? 查找第k个元素。 ? 查找指定的元素。 ? 删除第k个元素。 ? 在第k个元素之后/之前插入一个新元素。 线性表ADT(图1): 图1 线性表抽象数据类型 顺序表: 采用数组来表示一个对象的实例,数组中的每个位置被称之为单元(cell)或节点(node),每个数组单元应该足够大,以便能够容纳数据对象实例中的任意一个元素。在某些情况下,每个实例可分别用一个独立的数组来描述,而在其他情况下,可能要使用一个数组来描述几个实例。实例中每个元素在数组中的位置可以用一个数学公式来指明。 假定使用一个数组来描述表,需要把表中的每个元素映射到数组的具体位置上。第一个元素在什么地方?第二个元素在什么地方?在公式化描述中,可用一个数学公式来确定每个元素的位置。一个简单的映射公式如下: location(i)= i - 1 (式1-1) 式1-1表明第i个元素的存储位置在数组的第i-1个位置;

实验1线性表基本操作

实验1 线性表基本操作 实验目的 1.熟悉C语言的上机环境,掌握C语言的基本结构。 2.定义单链表的结点类型。 3.熟悉对单链表的一些基本操作和具体的函数定义。 4.通过单链表的定义掌握线性表的链式存储结构的特点。 5.熟悉对单链表的一些其它操作 实验内容 1. 实现单链表的定义和操作。该程序包括单链表结构类型以及对单链表操作的具体的函数定义 2. 约瑟夫环问题:任给正整数N和K,按下述方法可以得到1,2, …,n的一个置换,将数字1,2,…,n环形排列,按顺时针方向自1开始报数,报到K时输出该位置上的数字,并使其出列。然后从他在顺时针方向的下一个数字继续报数,如此下去,直到所有的数字全部出列为止。例如N=10,K=3,则正确的出列顺序应为3,6,9,2,7,1,8,5,10,4。 3. 试单链表实现一个简单的电子通讯本管理软件,要求能查找联系地址,增加和删除联系人。联系方式假定包括姓名、电话和地址。 4.实现集合数据类型。 实验要求 1.上机前要做好准备工作,包括程序框图、数据结构以及算法。 2.按时实验 3.服从实验室老师的安排 4.独立实验,有问题可以讨论,但不得翻版。 5.遵守实验室的各项纪律。 实验报告要求:详细见指导书 1.报告内容: 一、实验名称、实验目的 二、实验内容 主要包括问题描述、基本要求等。 三、分析与设计 1、需求分析数据结构描述(抽象数据类型) 2、功能模块的划分 3、存储结构(主要的类型及变量说明) 4、主要算法描述(PDL/流程图) 四、调试过程 1、测试数据设计 2、测试结果分析 3、使用说明 五、总结 1、调试过程中遇到的主要问题及解决过程 2、对设计和编码的讨论和分析 3、体会和收获。 六、附录:源程序代码(另附) 源程序代码电子版命名格式要求:

实验一 线性表的操作及应用

实验一线性表的操作及应用 1.实验目的 掌握线性表的创建、插入、删除、检索、求长度、销毁等操作链式存储结构上的实现。 掌握单链表表逆置的程序实现方法。 2.实验环境 Visual C++ 6.0 4.实验报告内容 (1)给出单链表的存储结构定义。 (2)给出在链式存储结构上实现线性表的插入操作的基本设计思想,并用C语言实现。 (3)给出在链式存储结构上实现线性表的删除操作的基本设计思想,并用C语言实现。 (4)给出在链式存储结构上实现线性表的查找值为e操作的基本设计思想,并用C语言实现。 5.实验报告要求 (1)字迹清晰; (2)代码格式符合规范,有缩进,关键之处有注释; (3)实验心得体会和问题建议要根据实际情况填写,不得为空。 代码: #include #include typedef int DataType; typedef struct node{ DataType data; /*每个元素数据信息*/ struct node *next; /*存放后继元素的地址*/ } LNode, *LinkList; LinkList Creat_LinkList(void ) { /*创建空单链表,入口参数:无;返回值:单链表的头指针,0代表创建失败,非0表成功*/ LinkList H; H=(LinkList)malloc(sizeof(LNode)); if (H) /*确认创建头结点创建是否成功,若成功,修改单链表头结点的指针

域为0表空表*/ H->next=NULL; return H; } void Destroy_LinkList(LinkList H) { /*销毁单链表,入口参数:单链表头指针的地址,出口参数:无*/ LinkList p,q; p=H; /*释放单链表的所有结点*/ q=p->next; p->next=q->next; delete q; H=NULL; /*将头指针变为零表示单链表不存在*/ } int Length_LinkList (LinkList H) { /* 求单链表表长,入口参数:单链表头指针,出口参数:表长,-1表示单链表不存在。*/ LinkList p=H; /* p指向头结点*/ int count= -1; /*H带头结点所以从-1开始*/ p=p->next; while(p) { count++;

实验1 线性表的基本操作 (1)

华南理工大学广州学院学生实验报告课程名称软件技术基础 电子信息工程学院学院自动化专业自动化一班姓名钟伟宏实验名称线性链表的基本操作实验日期指导老师 实验一线性表的基本操作 一、实验目的 (1)掌握线性表顺序存储和链式存储的方法及基本运算的实现。 (2)掌握将算法在VC++6.0语言环境下实现的过程。 二、实验准备 (1)复习线性表的定义,掌握顺序存储、链式存储的方法及操作。 (2)复习C语言中指针与结构体的概念、定义方式。 (3)掌握链表的C语言的实现。 (4)实验的计算机中安装了Microsoft VC++ 6.0。 三、实验内容 顺序表 1)首先创建一个顺序表:从键盘读入一组整数(长度小于等于20),按输入顺序放入顺序表,输入以-1结束(注意-1不放到顺序表内);将创建好的顺序表元素依次输出到屏幕上。 2)在已创建好的顺序表中插入一个元素:从键盘读入需插入的元素值和插入位置,调用插入函数完成插入操作;然后将顺序表元素依次输出到屏幕上。 3)在已创建好的顺序表中删除一个元素:从键盘读入欲删除的元素位置(序号),调用删除函数完成删除操作;然后将顺序表元素依次输出到屏幕上。 算法提示: 需求分析: 1.功能 (1)建立一顺序表 (2)显示顺序表中每个元素 (3)在上述的顺序表中的指定位置插入指定的元素,并输出顺序表中所有数据。 (4)在上述的顺序表中的指定位置删除指定的元素,并输出顺序表中所有数据。2.输入要求 从键盘输入顺序表中所有数据,输入以-1结束(注意-1不放到顺序表内);需插入的数据元素的位置、值;要删除的数据元素的位置(序号)。 3. 测试数据 顺序表中所有数据:15,26,58,27,9

数据结构线性表实验报告

实验报告 实验一线性表 实验目的: 1. 理解线性表的逻辑结构特性; 2. 熟练掌握线性表的顺序存储结构的描述方法,以及在该存储结构下的基本操作;并能灵活运用; 3. 熟练掌握线性表的链表存储结构的描述方法,以及在该存储结构下的基本操作;并能灵活运用; 4?掌握双向链表和循环链表的的描述方法,以及在该存储结构下的基本操作。 实验原理: 线性表顺序存储结构下的基本算法; 线性表链式存储结构下的基本算法; 实验内容: 2 - 21设计单循环链表,要求: (1 ) 单循环链表抽象数据类型包括初始化操作、求数据元素个数操作、插入操作、删 除操作、取消数据元素操作和判非空操作。 (2 ) 设计一个测试主函数,实际运行验证所设计单循环链表的正确性。

2 — 22 .设计一个有序顺序表,要求: (1 ) 有序顺序表的操作集合有如下操作:初始化、求数据元素个数、插入、删除和取 数据元素。有序顺序表与顺序表的主要区别是:有序顺序表中的数据元素按数据元素值非递减有序。 (2 ) 设计一个测试主函数,实际运行验证所设计有序顺序表的正确性。 (3) 设计合并函数ListMerge ( L1,L2,L3 ),功能是把有序顺序表 L1和L2中的数据元 素合并到L3,要求L3中的数据元素依然保持有序。并设计一个主函数,验证该合并函数的正确性。程序代码: 2-21 (1)头文件 LinList.h 如下: typedef struct node { DataType data; struct node *next; }SLNode; /* ( 1 )初始化 ListInitiate(SLNode * * head)*/ void ListInitiate(SLNode * * head) { /* 如果有内存空间,申请头结点空间并使头指针 head 指向头结点 */ if((*head=(SLNode *)malloc(sizeof(SLNode)))==NULL)exit(1); (*head)->next=NULL; /* 置结束标记 NULL*/ }

数据结构实验1

天津科技大学 2015—2016学年第2学期数据结构实验任务书 课程名称:数据结构实验学时: 2 实验题目:线性表的基本操作 实验环境: Visual C++ 实验目的: 1、掌握线性表的定义; 2、掌握线性表的基本操作,如建立、查找、插入和删除等。 实验内容: 定义一个包含学生信息(学号,姓名,成绩)的顺序表和链表(二选一),使其具有如下功能: (1) 根据指定学生个数,逐个输入学生信息; (2) 逐个显示学生表中所有学生的相关信息; (3) 根据姓名进行查找,返回此学生的学号和成绩; (4) 根据指定的位置可返回相应的学生信息(学号,姓名,成绩); (5) 给定一个学生信息,插入到表中指定的位置; (6) 删除指定位置的学生记录; (7) 统计表中学生个数。 实验提示: 学生信息的定义: typedef struct { char no[8]; //8位学号 char name[20]; //姓名 int score; //成绩 }Student; 顺序表的定义 typedef struct { Student *elem; //指向数据元素的基地址 int length; //线性表的当前长度 }SqList; 链表的定义:

typedef struct LNode{ Student data; //数据域 struct LNode *next; //指针域 }LNode,*LinkList; 实验要求: (1) 程序要添加适当的注释,程序的书写要采用缩进格式。 (2) 程序要具在一定的健壮性,即当输入数据非法时,程序也能适当地做出反应,如插入删除时指定的位置不对等等。 (3) 程序要做到界面友好,在程序运行时用户可以根据相应的提示信息进行操作。 (4) 根据实验报告模板详细书写实验报告,在实验报告中给出链表根据姓名进行查找的算法和插入算法的流程图。 (5) 以班为单位实验周周五上传源程序和实验报告。顺序表的源程序保存为SqList.cpp,链表的源程序保存为LinkList.cpp,实验报告命名为:实验报告1.doc。源程序和实验报告压缩为一个文件(如果定义了头文件则一起压缩),按以下方式命名:学号姓名.rar,如07081211薛力.rar。

实验1-线性表应用-

实验一线性表应用——循环移位加密软件 实验目的: 本次实验的主要目的是熟悉线性表的基本运算在两种存储结构上的实现,其中以熟悉单链表的基本操作为侧重点。通过本次实验还可帮助学生复习高级语言的使用方法。 实验要求: 用C语言编程实现单链表的基本操作。有必要的类型说明,并完成下述函数功能: (1)CreateList( ):逆序建立一个(带有头结点的)单链表,在键盘上按顺序输入 26个大写英文字母A……Z,最后输入的字母Z,放在头结点之后;第一个输入的字母A放在单链表的末尾。 (2)EncryptList( ):将存放于单链表中的所有字母均前移3个位置,即经过前移 后变化为: (3)ListPrint( ):显示单链表所有元素,此函数调用2次,分别在EncryptList ( ) 函数调用之前、之后使用。 在主函数main( )中调用各个子函数完成单链表的基本操作。 [实现提示] 注意输入数据越界的情况,要求程序有必要的提示信息,即输入除A……Z 之外的字符或数字,均为非法输入。 [测试数据] 由学生自己确定,注意边界数据。 程序源码(可付纸)(要求手写): 程序运行结果:(将运行结果截图贴/粘在Word文档中)

实验心得体会:在编写程序的过程中遇到了将非法字符串进链表的问题,通过多while循环的修改最终解。学习数据结构绝不是听懂就可以的,而是必须自己动手去实践,从自己的实践中找到不足和缺点,及时发现和改正能使自己记得更加牢固,使以后编写程序更加流畅和严谨! (请写出程序在编写、调制、编译、运行时出现的问题,以及解决问题的方法。 另外附以对本次实验/程序/算法的意见和建议)

数据结构实验线性表及其应用

计算机系数据结构实验报告(1) 实验目的: 帮助学生掌握线性表的基本操作在顺序和链表这两种存储结构上的实现,尤以链表的操作和应用作为重点。 问题描述: 1、构造一个空的线性表L。 2、在线性表L的第i个元素之前插入新的元素e; 3、在线性表L中删除第i个元素,并用e返回其值。 实验要求: 1、分别利用顺序和链表存储结构实现线性表的存储,并设计出在不同的存储结构中线 性表的基本操作算法。 2、在实验过程中,对相同的操作在不同的存储结构下的时间复杂度和空间复杂度进行 分析。 算法分析: 由于两种存储结构都用来创建线性结构的数据表,可采用相同的输出模式和整体结构类似的算法,如下: 实验内容和过程: 顺序存储结构线性表程序清单: //顺序存储结构线性表的插入删除 #include #include <> using namespace std; # define LISTSIZE 100 # define CREMENTSIZE 10 typedef char ElemType; //定义数据元素类型为字符型 typedef struct { ElemType *elem; //数据元素首地址

int len; //当前元素个数 int listsize; //当前存储最大容量 }SqList; //构造一个空的线性表L int InitList(SqList &L) { =(ElemType *)malloc(LISTSIZE*sizeof(ElemType)); if (! exit(-2); //分配空间失败 =0; =LISTSIZE; } //在顺序线性表L中第i个位置之前插入新的元素e int ListInsert(SqList &L,int i,ElemType e) { if (i<1||i>+1) return -1; //i值不合法 if >= { ElemType *newelem=(ElemType *)realloc,+CREMENTSIZE)*sizeof(ElemType)); //存储空间已满,增加分配 if(!newelem) exit (-2); //分配失败 =newelem; +=CREMENTSIZE; } ElemType *q=&[i-1]) ; for (ElemType *p=&[]);p>=q;--p) *(p+1)=*p; //插入位置及其后的元素后移 *q=e; ++; return 1; } //在顺序线性表L中删除第i个元素,并用e返回其值 int ListDelete(SqList &L,int i,ElemType&e) { if (i<1||i> return -1; //i值不合法

相关主题
文本预览
相关文档 最新文档