文档库 最新最全的文档下载
当前位置:文档库 › 数据结构实验报告-实验:1线性表的顺序存储和操作实现

数据结构实验报告-实验:1线性表的顺序存储和操作实现

信息管理学院专业课实验报告

上机日期:2016 年 3 月18日上机地点与机号:Sc614 指导教师:李爱军班级: 2014级信息一班学号: 2 上机人:王坚

《数据结构》课程实验报告一

《数据结构》课程 实验报告一线性表的顺序实现 一、实验目的和要求: 1.掌握顺序表的存储结构形式及其描述和基本运算的实现。 2.掌握用顺序表表示集合等数据的方法,并能设计出合理的存储结构,编写出有关运算的算法。 二、实验内容:(给出具体的说明文字和操作图片) 已知顺序表结构与相关函数定义在sequlist.h文件中,基于该文件完成所有实验题。 1.基于sequlist.h中定义的顺序表L,设计一个算法void delx(sequence_list *L, datatype x),删除其中所有值等于x 的元素,要求算法的时间复杂度为O(n)、空间复杂度为0(1)。 #include #include #include /**********************************/ /*顺序表的头文件,文件名sequlist.h*/ /**********************************/ #define MAXSIZE 100 typedef int datatype; typedef struct{ datatype a[MAXSIZE];//存放数组a的第一个地址 int size;//长度 }sequence_list; //请将本函数补充完整,并进行测试//

void initseqlist(sequence_list *L)//初始化OK { L->size=0; } void input(sequence_list *L) { datatype x; initseqlist(L); printf("请输入一组数据,以0做为结束符:\n"); scanf("%d",&x); while (x) { L->a[L->size++]=x; scanf("%d",&x); } }

数据结构实验报告—顺序表

《算法与数据结构》课程实验报告

一、实验目的 1、实现线性表的顺序存储结构。 2、熟悉C++程序的基本结构,掌握程序中的头文件、实现文件和主文件之 间的相互关系及各自的作用。 3、熟悉顺序表的基本操作方式,掌握顺序表相关操作的具体实现。 二、实验内容及要求 对顺序存储的线性表进行一些基本操作。主要包括: (1)插入:操作方式为在指定元素前插入、在指定元素之后插入、在指定位置完成插入。 (2)删除:操作方式可分为删除指定元素、删除指定位置的元素等,尝试实现逻辑删除操作。 (3)显示数据。 (4)查找:查询指定的元素(可根据某个数据成员完成查询操作)。 (5)定位操作:定位指定元素的序号。 (6)更新:修改指定元素的数据。 (7)数据文件的读写操作等。 其它操作可根据具体需要自行补充。 要求线性表采用类的定义,数据对象的类型自行定义。 三、系统分析 (1)数据方面:能够实现多种数据类型顺序表的创建,并进行操作,不同的数据类型数据使用不同的文本文件保存。 (2)功能方面:能够实现线性表的一些基本操作,主要包括: 1.计算表最大可以容纳表项个数以及当前表的当前长度。 2.能够进行添加操作,在已有的数据文件中进行数据的添加。 3.能够进行搜索操作,返回搜索项在表中表项序号 4.能够进行定位操作,定位到表中合理位置。 5.能够进行取值操作,根据用户需求取出表中某项的值。 6.能够进行修改操作,在用户选择修改项后将重新输入内容修改到对应位置。 7.能够进行插入操作,在用户选择合理位置并输入插入内容后即可。 8.能够进行删除操作,用户根据选择表中项数删除对应数据。 9.能够进行判断表空或表满。 四、系统设计 (1)设计的主要思路 根据实验要求,首先将顺序表模板类完成,并将需要实现的功能代码完善,在写实现各个功能的菜单并将模板类实例化为简单数据类型最后进行调试,由于还需使得顺序表能够存储自定义的学生类类型数据,故根据要求写出Student类,

实验一 线性表的顺序实现及操作

实验一 线性表的顺序实现及操作 一、实验目的 1.掌握用上机调试线性表顺序实现的基本方法。 2.掌握线性表的基本操作,插入、删除、查找等运算在顺序存储结构上的实现。 二、实验要求 1.认真阅读和分析实验内容。 2.设计顺序线性表操作的算法。 3.编程实现这些算法。 4.上机调试程序,结合程序进行分析,打印出文件清单和运行结果。 三、实验内容 1.线性表顺序存储的物理结构(如图所示) ① Elem :存储存放表元素连续内存空间的首地址; ② Length :存储Elem 所指空间中存放的元素个数; ③ ListSize :存储Elem 空间的大小,该大小值以元素个数为单位来体现; ④ 注意,在线性表的逻辑结构中,元素在线性表中的位置次序是从1开始计数的; ⑤ 线性表L 实质是一个具有三个域的结构类型的变量。 2.编程实现如下要求: 定义出该线性表物理结构;初始化顺序存储的线性表;销毁线性表;将线性表重新设置为空表;判断线性表是否为空表;返回线性表的长度;在线性表中插入一个元素;在线性表中删除一个元素;取线性表中第i 个元素的值;在线性表中查找参数Elem 值所给定的元素;将线性表中指定位置的元素值修改成指定的值。 3.代码示例 // 以下代码书写在SqList.h 文件中。 #include // 一般将系统头文件用< >括起来,自定义头文件用" "括起来。 #define LIST_INIT_SIZE 50 #define LIST_INCREMENT 50 //typedef int ListElemType; // 该类型的定义也可以在该头文件的外部来定义,这样在使用线性表结构时,可以尽可能少地 // 改动该头文件内的代码。 // 顺序线性表数据类型的定义。该定义是对所设计的物理结构的编程语言描述。 typedef struct { ListElemType *Elem; // 存放一片连续内存空间的首地址,该空间中存放线性表元素值。 unsigned long Length; // 存放线性表中元素的个数值。 unsigned long ListSize; // 存放Elem 对应空间的大小,该大小用元素的个数来体现。 } List, SqList; // List 类型和SqList 类型相同,都是包含三个域的结构类型。但语义不同,List 表示线性表,SqList // 表示顺序存储结构的线性表。 L

数据结构实验报告

数据结构实验报告 实验一数据结构实验报告 一、实验目的 本实验的目的是通过实践,对数据结构的基本概念和基本操作进行理 解与掌握。通过实验,加深对线性表及其实现方式的认识,并能够编程实 现线性表相应的各种操作。 二、实验内容 1.线性表的顺序存储结构的实现 在本实验中,我们采用顺序存储结构实现线性表。通过编写程序,实 现线性表的初始化、插入、删除、查找等基本操作。具体实现流程如下: a)初始化线性表:申请一定大小的内存空间,用于存储线性表的数据 元素。 b)插入操作:在线性表的任意位置插入一个新元素。若插入位置无效,返回错误提示。 c)删除操作:在线性表中删除指定位置的元素。若删除位置无效,返 回错误提示。 d)查找操作:查找线性表中指定元素的位置。若找到,返回元素所在 位置的序号;若找不到,返回错误提示。 2.线性表的链式存储结构的实现 在本实验中,我们采用链式存储结构实现线性表。通过编写程序,实 现链表的初始化、插入、删除、查找等基本操作。具体实现流程如下:

a)初始化线性表:创建一个头节点,并初始化链表为空。 b)插入操作:在链表的任意位置插入一个新节点。若插入位置无效,返回错误提示。 c)删除操作:删除链表中指定位置的节点。若删除位置无效,返回错误提示。 d)查找操作:查找链表中指定元素的位置。若找到,返回元素所在位置的序号;若找不到,返回错误提示。 三、实验过程与结果分析 1.线性表的顺序存储结构实现 a)实现过程: 首先,定义一个结构体,用于存储线性表的相关信息,包括线性表的总长度、当前长度和数据元素的数组。 然后,编写初始化函数,通过动态分配内存空间,为线性表的数据元素数组分配一定大小的内存空间。 接着,实现插入操作。在插入操作中,判断插入位置是否有效,若无效,则返回错误提示;若有效,则将插入位置以后的所有元素向后移动一位,空出插入位置,将新元素插入到指定位置上。 同样地,实现删除操作。判断删除位置是否有效,若无效,则返回错误提示;若有效,则将删除位置以后的所有元素向前移动一位,覆盖掉删除位置上的元素。

数据结构实验报告实验一

数据结构实验报告实验一 实验一:线性表的实现 一、实验目的和内容 1. 掌握线性表的基本操作和实现方法。 2. 熟悉顺序表和链表的存储结构。 二、实验设备和工具 1. 计算机; 2. CodeBlocks开发环境; 3. C语言编译器。 三、实验原理 线性表:线性表是由n(n>=0)个数据元素组成的有限序列。若将n个数据元素存在一维数组中,用一组连续的存储单元存放,数据元素之间的关系是前驱后继关系,则该线性表称为顺序表。若将这n个数据元素存放在任意的存储单元中,可以用一组任意的存储单元来存放线性表中的元素,这种存储方式称为链式存储方式,简称链表。 顺序表:顺序表的存储结构是将表中的数据元素存放在一组连续的存储单元中,并且数据元素之间的关系也是顺序的。在计算机中,顺序表通常用数组来实现。由于数组的大小是固定的,所以数组的容量将是固定的。因此,在实现线性表的基本操作时,我们必须处理数组容量不够的情况,为此,我们通常会使用动态数组的方式来实现。 链表:链表是用一组任意的存储单元来存放表中的元素,这些存储单元可以不连续。在链表中,每个存储单元都包含一个数据元素和指向下一个存储单元的指针。这样,一个单元的指针就指向了下一个单元,从而形成了链表的结构。链表的最后一个单元的指针指向一个特殊的标记NULL,表示链表的末尾。链表的插入、删除操作可以比较方便的实现,但是查找操作比较困难。 四、实验步骤和实验结果 实验1-1 顺序表的基本操作 1.实验目的 2.实验步骤

(1)数据结构定义 typedef struct { int *element; // 存储空间基址 int length; // 当前长度 int capacity; // 当前容量 } SeqList; (2)创建空表 (3)判断是否为空表 bool isEmpty(SeqList *L) { return L->length == 0; } (4)获取表长度 (5)获取元素 (6)查找元素 int locateElem(SeqList *L, int e) { for (int i = 0; i < L->length; i++) { if (L->element[i] == e) return i + 1; } return 0; // 未找到 } (7)插入元素

数据结构实验一线性表的顺序

数据结构实验一线性表的顺序 存储结构 实验一:线性表的顺序存储结构 实验学时:2 验证 实验类型: 、实验目的: 1.熟练掌握线性表的基本操作在顺序存储和链 式存储上的实现; 2.以线性表的各种操作(建立、插入、删除 等)的实现为重点; 3.掌握线性表的动态分配顺序存储结构的定义 和基本操作的实现; 二、实验内容: 1•输入一组整型数据,建立顺序表。 2•实现该线性表的删除。

3.实现该线性表的插入。 4.实现线性表中数据的显示。 5.实现线性表数据的查找和定位 5、编写一个主函数,调试上述算法。 三、实验原理、方法和手段 1•根据实验内容编程,上机调试、得出正确的运行程序。 2.编译运行程序,观察运行情况和输出结果 3.写出实验报告(包括源程序和运行结果)。 四、实验条件 运行Visual C++的微机一台 五、实验步骤(程序清单): (一)、程序代码: #include "stdafx.h" #include using namespace std; typedef int elemtype; struct list { elemtype *p; int size; int maxsize; }; void buildlist(list &a, int b) /* 建立顺序表*/ { if (b<=0) { cout« "数据有误"<

} a.p= new elemtype[b]; if (a.p==NULL) { coutvv "动态可分配的空间用完,退出运行!" vvendl; } a.size=0; a.maxsize=b; } void clearlist(list &a) /* 清空线性表*/ { if (a.p!=NULL) { delete []a.p; a.p=NULL; } a.maxsize =0; a.size=0; } bool insertlist(list &a, int pos,elemtype b) /*向线性表中按给定的位置插入一个元素*/ int i; if (pos<=0||pos-1>a.size) { cout« "位置无效"《endl; return false ; } if (a.maxsize<=a.size) { a.p=(elemtype*)realloc(a.p,2*a.maxsize * sizeof (b)); a.maxsize=2*a.maxsize; } for ( i=a.size;i>=pos;i--) a.p[i]=a.p[i-1]; a.p[i]=b; a.size++; return true ; } bool deletelist(list &a, int pos) /*向线性表中按给定的位置删除一个元素*/ { if (a.size==0) { coutvv "线性表为空,删除无效!" vvendl; return false ; }

数据结构线性表实验报告

数据结构线性表实验报告 数据结构线性表实验报告 实验目的: 本次实验主要是为了学习和掌握线性表的基本操作和实现方式。通过实验,我们可以加深对线性表的理解,并能够熟悉线性表的基 本操作。 实验设备与环境: 本次实验所需的设备包括计算机和编程环境。我们选择使用C 语言来实现线性表的操作,并在Visual Studio Code编程软件中进行编写和调试。 实验内容: 1.线性表的定义和基本操作 1.1 线性表的定义:线性表是一种有序的数据结构,其中的元 素按照一定的顺序存储,可以插入、删除和访问元素。 1.2 线性表的基本操作: 1.2.1 初始化线性表:创建一个空的线性表。 1.2.2 判断线性表是否为空:判断线性表是否不含有任何 元素。

1.2.3 获取线性表的长度:返回线性表中元素的个数。 1.2.4 在线性表的指定位置插入元素:在线性表的第i个 位置插入元素x,原第i个及其之后的元素依次后移。 1.2.5 删除线性表中指定位置的元素:删除线性表中第i 个位置的元素,原第i+1个及其之后的元素依次前移。 1.2.6 获取线性表中指定位置的元素:返回线性表中第i 个位置的元素的值。 1.2.7 清空线性表:将线性表中的元素全部删除,使其变 为空表。 2.线性表的顺序存储结构实现 2.1 线性表的顺序存储结构:使用数组来实现线性表的存储方式。 2.2 线性表的顺序存储结构的基本操作: 2.2.1 初始化线性表:创建一个指定长度的数组,并将数 组中的每个元素初始化为空值。 2.2.2 判断线性表是否为空:判断线性表的长度是否为0。 2.2.3 获取线性表的长度:返回线性表数组的长度。

数据结构实验报告1线性表的顺序存储结构

数据结构实验报告1线性表的顺序存储结构数据结构实验报告1线性表的顺序存储结构 第一章引言 线性表是计算机中最常见的数据结构之一,它是一种有序的数据元素集合,其中的数据元素之间具有一对一的关系。线性表的存储结构有多种方式,其中顺序存储结构是最简单的一种,它使用一段连续的存储单元来存储线性表中的元素。 第二章顺序存储结构的定义 顺序存储结构是将线性表中的元素按照其逻辑顺序依次存储在一块连续的存储空间中。顺序存储结构的特点是可以快速地访问任意位置的元素,但插入和删除操作需要移动大量的元素。 第三章顺序存储结构的实现 1.存储空间的分配 顺序存储结构通常使用数组来实现,数组的长度应该大于等于线性表的长度,以防止溢出。存储空间的分配可以使用静态分配或动态分配两种方式来实现。 2.线性表的初始化

初始化线性表时,需要设置线性表的长度和当前元素的个数。 3.线性表的增删改查操作 ●插入操作:________在指定位置插入一个元素时,需要将插入位置之后的元素依次后移,给待插入的元素腾出位置。 ●删除操作:________删除指定位置的元素时,需要将删除位置之后的元素依次前移,覆盖删除位置上的元素。 ●修改操作:________修改指定位置的元素时,直接对该位置上的元素进行修改即可。 ●查找操作:________根据指定的元素值,查找其在顺序存储结构中的位置。 4.线性表的遍历操作 遍历操作可以按照顺序访问线性表中的每个元素,可以使用循环结构实现遍历操作。 第四章顺序存储结构的优缺点分析 1.优点:________可以快速地访问任意位置的元素,节省存储空间。 2.缺点:________插入和删除操作需要移动大量的元素,不适用于频繁插入和删除的场景。

线性表实验报告

线性表实验报告 导言: 线性表是数据结构中最基本也是最常用的一种结构之一。它以一种线性的方式存储和组织数据,简单而高效。本实验旨在通过对线性表的实践操作,加深对线性表概念的理解,并掌握其基本操作。 实验目的: 1. 了解线性表的基本概念和特点; 2. 掌握线性表的基本操作,如插入、删除、查找等; 3. 熟悉线性表的顺序存储和链式存储结构; 4. 学会通过编程实现线性表的基本操作。 实验内容: 本次实验分为两个部分,分别是线性表的顺序存储和链式存储结构。 一、顺序存储结构的线性表操作

1. 初始化线性表:定义一个固定大小的数组,用于存储线性表中的元素; 2. 插入元素:从表尾开始,逐个向前移动元素,为新元素腾出位置; 3. 删除元素:从指定位置开始,逐个向后移动元素,覆盖待删除元素; 4. 查找元素:按照线性表的顺序依次比较元素,直到找到目标元素或遍历结束; 5. 获取表长度:通过记录插入和删除操作的次数,得到线性表的长度。 二、链式存储结构的线性表操作 1. 定义结点:创建一个结点类,包含数据域和指向下一结点的指针;

2. 初始化链表:定义一个头指针,将其初始化为 NULL,表示链表为空; 3. 插入元素:找到插入位置的前一个结点,将新结点插入到其后面; 4. 删除元素:找到待删除结点的前一个结点,将其指针指向待删除结点的下一个结点; 5. 查找元素:从链表头部开始遍历,逐个比较结点中的数据,直到找到目标元素或遍历结束; 6. 获取表长度:通过遍历链表中的结点,计数来获取表长度。 实验过程: 1. 根据实验目的,在 C/C++ 环境下创建一个项目,并命名为"LinearList";

数据结构实验一 线性表认识实验报告(含完整源代码)

实验一线性表认识实验 第一部分实验目的 简要描述实验目的: 1. 通过实验过程了解并掌握线性表的顺序存储结构的定义及顺序表中的各种基本操作; 2. 通过实验过程了解并掌握线性表的链式存储结构的定义及链式表中的各种基本操作; 3. 认识线性表并且会利用线性表的两种存储结构解决简单问题。 第二部分实验流程 2.1 实验工具 操作系统:Microsoft Windows10 开发软件:Visual Studio 2010 2.2 实验内容 完成对顺序表的删除,插入,查找,输出等操作。 完成对链表的插入,查找,返回等操作。 认识线性表并且会利用线性表的两种存储结构解决简单问题。对线性表中的代码进行学习与掌握。 第三部分实验总结 3.1 实验完成任务 1.线性表的顺序存储结构及基本操作: 2.线性表的链式存储结构及基本操作:

3.设计实验:约瑟夫环 #include #include #include #include typedef struct Node { int number; // 数据子域 struct Node *next; // 指针子域 }person; person *creat(int n){ person *head,*p,*x; head=(person*)malloc(sizeof(person)); //分配头结点head->number=1;

head->next=NULL; p=head; for (int i=2; i<=n; i++) { x=(person*)malloc(sizeof(person));// 分配新结点 x->number=i; x->next=NULL; p->next=x; p=p->next; } p->next=head;//首尾相连 return head; } void delete_L(person * head,int k,int m){ person * tail=head; //找到链表第一个结点的上一个结点,为删除操作做准备while (tail->next!=head) { tail=tail->next; } person * p=head; //找到编号为k的人 while (p->number!=k) { tail=p; p=p->next; } //从编号为k的人开始,只有符合p->next==p时,说明链表中除了p结点,所有编号都出列了,while (p->next!=p){ //找到从p报数1开始,报m的人,并且还要知道数m-1的人的位置tail for (int i=1; inext; } tail->next=p->next;//从链表上将p结点删除 printf("出列人的编号为:%d\n",p->number); free(p); p=tail->next;//继续使用p指针指向出列编号的下一个编号,游戏继续 } printf("出列人的编号为:%d\n",p->number); free(p); } int main() { printf("202011张三\n"); printf("输入圆桌上的人数n:"); int n;

线性表的顺序存储结构实验报告总结

线性表的顺序存储结构实验报告总结 一、需求分析 ⒈本程序中,要求输入到表A,B中的元素是整形的,并且要按非递增顺序输入,否则系统会给出“出错信息”。输出结果应该是一个不含有重复元素的非递增的表。 ⒉本程序以用户和计算机的对话方式执行,即在计算机演示界面上显示“提示信息”后,由用户在键盘上输入相应的信息;相应的输入数据和运算结果显示在其后。 ⒊程序执行的命令包括: (1)构造线性表A (2)构造线性表B (3)检验表A,B是否非递减有序(4)求表A与B的合并(5)删除表中值相同的多余元素(6)结束。 4.测试数据 (1)A=123 (2)A=9 5 0 -2 B=1050-1-3-5 -10 二、概要设计 ⒈为实现上述算法,需要线性表的抽象数据类型: ADT Stack { 数据对象:D={ai:|ai∈ElemSet,i=1…n,n≥0} 数据关系:R1={|ai-1,ai∈D,i=2,…n} 基本操作: init(list *L) 操作结果:构造一个空的线性表L。 InputList(List *L) 初始条件:线性表L已经存在 操作结果:人工输入了一张表。

CheckList(List *L) 初始条件:线性表L已经存在 操作结果:判断L是否非递增有序,若为否,则重新输入。MergeList(List *La,List *Lb,List *Lc) 初始条件:非递增线性表La,Lb已经存在 操作结果:合并La,Lb得到Lc,Lc仍按非递增有序排列。DeleteSame(List *L) 初始条件:非递增线性表L已经存在 操作结果:删除了L中值相同的元素。 PrintList(List L) 初始条件:线性表L已经存在 操作结果:打印出表L。 }ADT List 2. 本程序有三个模块: ⑴主程序模块 void main(){ 初始化; do{ 接受命令; 显示结果; }while(执行完毕) } ⑵线性表单元模块:实现线性表抽象数据类型; ⑶结点结构单元模块:定义线性表中的结点结构。

数据结构实验研究报告线性表的顺序表示和实现

数据结构实验研究报告线性表的顺序表示和实现

————————————————————————————————作者:————————————————————————————————日期:

数学与计算科学学院实验报告 实验项目名称:线性表的顺序表示和实现 所属课程名称:数据结构A 实验类型:验证性 实验日期:2012年4月5号 班级:信管10-02班 学号:201044070218 姓名:张松涛 成绩:

一、实验概述: 【实验目的】 (1)、线性表的逻辑结构特征。 ①、总存在第一个和最后一个元素。 ②、除第一个元素以外,每一个元素总存在唯一一个直接前驱元素。 ③、除最后一个元素以外,每一个元素总存在唯一一个直接后驱元素。 (2)、顺序表的特征。 ①、逻辑关系上相邻的物理位置上也相邻。 ②、是一种随机存储结构,可以用一个简单直观的公式来表示每一个元素的 地址。 (3)学会定义线性表的顺序存储类型,实现C程序的基本结构,对线性表的一些基本操作和具体的函数定义。掌握顺序表的基本操作,实现顺序表的插入、删除、查找以及求并集等运算。 【实验原理】 //--------线性表的动态分配顺序存储结构----------- #define LIST_INIT_SIZE 5 //线性表存储空间的初始分配量 #define LISTINCREMENT 2 //线性表存储空间的分配增量 Typedef struct{ ElemType *elem; //存储空间基址 int length; //当前长度 int listsize; //当前分配的存储容量(以sizeof(ElemType)为单位)

数据结构实验报告-线性表(顺序表实现)

实验1:线性表(顺序表的实现) 一、实验项目名称 顺序表基本操作的实现 二、实验目的 掌握线性表的基本操作在顺序存储结构上的实现。 三、实验基本原理 顺序表是由地址连续的的向量实现的,便于实现随机访问。顺序表进行插入和删除运算时,平均需要移动表中大约一半的数据元素,容量难以扩充 四、主要仪器设备及耗材 Window 11、Dev-C++5.11 五、实验步骤 1.导入库和一些预定义: 2.定义顺序表: 3.初始化: 4.插入元素:

5. 查询元素: 6.删除元素: 7.销毁顺序表: 8.清空顺序表: 9.顺序表长度:

10.判空: 11.定位满足大小关系的元素(默认小于): 12.查询前驱: 13.查询后继:

14.输出顺序表 15.归并顺序表 16.写测试程序以及主函数 对顺序表的每一个操作写一个测试函数,然后在主函数用while+switch-case的方

式实现一个带菜单的简易测试程序,代码见“实验完整代码”。 实验完整代码: #include using namespace std; #define error 0 #define overflow -2 #define initSize 100 #define addSize 10 #define compareTo <= typedef int ElemType; struct List { ElemType *elem; int len; int listsize; }L; void init(List &L) { L.elem = (ElemType *) malloc(initSize * sizeof(ElemType)); if(!L.elem) { cout << "分配内存失败!"; exit(overflow); } L.len = 0;

数据结构实验报告-线性表

1 线性表 1. 实验题目与环境 1.1实验题目及要求 (1)顺序表的操作 利用顺序存储方式实现下列功能:根据键盘输入数据建立一个线性表,并输出该线性表;对该线性表进行数据的插入、删除、查找操作,并在插入和删除数据后,再输出线性表。 (2)单链表的操作 利用链式存储方式实现下列功能:根据键盘输入数据建立一个线性表,并输出该线性表;对该线性表进行数据的插入、删除、查找操作,并在插入和删除数据后,再输出线性表。 (3)线性表的应用 约瑟夫环问题。有n个人围坐一圈,现从某个人开始报数,数到M的人出列,接着从出列的下一个人开始重新报数,数到M的人又出列,如此下去,直到所有人都出列为止。要求依次输出出列人的编码。 2.问题分析 (1)顺序表的操作 利用一位数组来描述顺序表,即将所有元素一词储存在数组的连续单元中,要在表头或中间插入一个新元素时,需要将其后的所有元素都向后移动一个位置来为新元素腾出空间。同理,删除开头或中间的元素时,则将其后的所有元素向前移动一个位置以填补空位。查找元素时,则需要利用循环语句,一一判断直到找出所要查找的元素(或元素的位置),输出相关内容即可 (2)单链表的操作 利用若干个结点建立一个链表,每个节点有两个域,即存放元素的数据域和存放指向下一个结点的指针域。设定一个头指针。在带头结点的单链表中的第i个元素之前插入一新元素,需要计数找到第i-1个结点并由一指针p指向它,再造一个由一指针s指向的结点,数据为x,并使x的指针域指向第i个结点,最后修改第i-1个结点的指针域,指向x结点。删除第i个元素时,需要计数寻找到第i个结点,并使指针p指向其前驱结点,然后删除第i个结点并释放被删除结点的空间。查找第i个元素,需从第一个结点开始计数找到第i个结点,然后输出该结点的数据元素。 (3)线性表的应用 程序运行之后,首先要求用户指定初始报数的上限值,可以n<=30,此题中循环链表可不设头结点,而且必须注意空表和"非空表"的界限。如:n=8,m=4时,若从第一个人,设每个人的编号依次为1,2,3,…开始报数,则得到的出列次序为4 8 5 2 1 3 7 6,

相关文档
相关文档 最新文档