顺序表链表总结实验报告
- 格式:docx
- 大小:182.68 KB
- 文档页数:27
竭诚为您提供优质文档/双击可除顺序表的基本操作实验报告篇一:顺序表的基本操作--实验报告实验报告附:源程序:#include#definemaxsize100#defineerror0#defineok1typedefstruct{intelem[maxsize];intlast;}seqList;intInsList(seqList*L,inta,inti);intLocate(seqListL,inte);intDel(seqList*L,inti);voidmain(){inti,e,a;intlist1,list2;if(L.elem[st]==-1)seqListL;st=0;for(i=0;i list1=InsList(if(list1){}elseprintf("插入失败!");printf("要查找的元素为\n");scanf("%d",printf("插入后的顺序表为:\n");for(i=0;i list2=Locate(L,e);if(!list2)printf("该元素不存在\n");}printf("该元素所在位置的序号为:%d\n",list2);/*删除元素*/printf("是否要删除该元素?\n");intm;scanf("%d",if(m){Del(printf("删除后的顺序表为:\n");for(i=0;iintInsList(seqList*L,inta,inti)//i位置,下标i-1{for(p=L->last;p>=i-1;p--)L->elem[p+1]=L->elem[p];in tp;if(L->last>=maxsize-1){}printf("表已满,无法插入");return(error);L->elem[i-1]=a;L->last++;return(ok );intLocate(seqListL,inte){}intDel(seqList*L,inti){}for(k=i;klast;k++)L->elem[k-1]=L->elem[k];intk ;inti=0;while((ilast--;returnok;篇二:线性表的基本操作实验报告实验一:线性表的基本操作【实验目的】学习掌握线性表的顺序存储结构、链式存储结构的设计与操作。
顺序表实验报告顺序表是一种线性数据结构,它以连续的存储空间来存储数据元素,通过元素在数组中的相对位置来表示数据元素之间的逻辑关系。
在这个实验中,我们使用顺序表的实现来进行实验。
首先我们先了解一下顺序表的结构。
顺序表由两部分组成:表头和表体。
表头包含顺序表的一些基本信息,如顺序表的长度和当前表体的容量;表体是一个一维数组,用来存储数据元素。
在这个实验中,我们主要实现顺序表的插入操作和删除操作。
插入操作是指将一个新的数据元素插入到顺序表的某个位置;删除操作是指在顺序表中删除某个位置的数据元素。
实验步骤如下:1. 首先,我们需要定义一个顺序表的数据结构,包含表头和表体。
表头中需要有顺序表的长度和当前表体的容量,表体是一个一维数组。
2. 接下来,我们实现插入操作。
插入操作需要输入要插入的数据元素和插入的位置。
我们首先需要判断插入的位置是否合法,即位置在顺序表的范围内。
如果位置不合法,就返回插入失败。
如果位置合法,我们需要判断当前表体的容量是否已满。
如果已满,我们需要重新分配更大的内存空间来存储数据。
然后我们将插入位置后面的数据元素依次往后移动一位,给新的数据元素腾出位置。
最后,我们将要插入的数据元素放入指定位置处,并更新顺序表的长度。
3. 然后,我们实现删除操作。
删除操作需要输入要删除的位置。
首先我们需要判断删除的位置是否合法。
如果位置不合法,就返回删除失败。
如果位置合法,我们需要将删除位置后面的数据元素依次往前移动一位。
最后,我们更新顺序表的长度即可。
4. 最后,我们编写测试用例来检验我们实现的代码是否正确。
我们可以对插入和删除进行多次操作,然后查看顺序表的状态是否符合预期。
通过这个实验,我们可以更加深入地理解顺序表的原理和实现细节。
顺序表的插入和删除操作是非常常见的操作,掌握了这些操作,我们就能更加灵活地应用顺序表来解决实际问题。
同时,这个实验也锻炼了我们的编程能力和调试能力,提高了我们的代码质量和效率。
顺序表实验总结
顺序表是一种线性数据结构,它将元素存储在连续的内存空间中。
在顺序表实验中,我们学习了顺序表的基本操作,如创建、插入、删除、查找和遍历等。
在实验中,我们发现顺序表的优点是存取速度快,可以随机访问元素。
不过,当插入或删除元素时,需要移动后续元素的位置,导致时间复杂度较高。
此外,顺序表的大小固定,当存储空间不足时,需要重新申请更大的内存空间。
在使用顺序表时,我们需要考虑数据的类型和大小,以及内存空间的分配和释放。
在插入和删除元素时,我们需要考虑元素位置的调整,确保数据的正确性。
同时,我们也要注意顺序表的性能问题,如优化算法和减少数据的移动次数等。
总之,顺序表是一种常见的数据结构,我们需要掌握其基本操作和使用技巧,以便在实际应用中能够高效地处理数据。
- 1 -。
顺序表实验总结
本次顺序表实验通过对顺序表的基本操作和算法的学习,深入了解了顺序表的特点和实现方式。
实验内容包括对顺序表的创建、插入、删除、查找、排序等操作的实现和应用。
通过实现这些操作,我们可以更加深刻地理解数据结构中的顺序表,掌握其基本操作和算法,进一步提高编程能力。
实验中我们实现了顺序表的创建、插入、删除、查找、排序等基本操作,通过对这些操作的实现,我们学习了顺序表的内部实现机制和各种算法的原理和应用。
同时,我们还通过实验掌握了C语言的编程技巧,如指针的使用、内存管理等。
与此同时,本次实验还加强了我们的团队合作意识和沟通能力。
在实验过程中,我们互相协作、相互帮助,共同解决了实验中遇到的问题,提高了我们的团队精神和合作能力。
总的来说,本次顺序表实验是一次非常有意义的实践活动,通过实践我们深入学习了顺序表的基本操作和算法,提高了我们的编程能力和团队合作能力,为今后的学习和实践打下了坚实的基础。
- 1 -。
顺序表基本算法实验报告顺序表基本算法实验报告一、实验目的本次实验旨在深入了解顺序表的基本操作和算法,包括顺序表的创建、插入、删除、遍历等操作,通过实际操作加深对顺序表的理解和应用能力。
二、实验内容和步骤1.顺序表的创建我们首先需要创建一个顺序表。
顺序表在内存中以数组的形式存在。
我们定义一个数组,并使用数组的索引来访问和操作其中的元素。
def create_sequential_list(size):sequential_list = []for i in range(size):sequential_list.append(0)return sequential_list2.插入操作顺序表的插入操作包括在指定位置插入一个元素。
这个操作需要注意插入位置及其前后的元素的处理。
def insert_sequential_list(sequential_list, index, value):sequential_list.insert(index, value)3.删除操作删除操作则是从顺序表中移除一个指定位置的元素。
这个操作需要注意被删除元素的前后元素的处理。
def delete_sequential_list(sequential_list, index):sequential_list.pop(index)4.遍历操作遍历操作则是访问顺序表中的每一个元素。
我们可以使用for循环来遍历顺序表中的所有元素。
def traverse_sequential_list(sequential_list):for element in sequential_list:print(element)三、实验结果和分析通过以上实验,我们成功实现了顺序表的创建、插入、删除和遍历操作。
插入和删除操作的时间复杂度为O(n),其中n为顺序表的大小。
遍历操作的时间复杂度为O(n)。
顺序表是一种简单高效的数据结构,适用于元素数量固定且频繁进行插入、删除和遍历操作的场景。
c语言链表实验报告C语言链表实验报告引言:链表是一种常见的数据结构,它在计算机科学中有着广泛的应用。
通过链表,我们可以动态地存储和操作数据,实现各种复杂的算法和数据结构。
本实验旨在通过使用C语言,实现一个简单的链表结构,并演示其基本操作和应用。
一、链表的定义和基本概念链表是由一系列节点组成的数据结构,每个节点包含数据和指向下一个节点的指针。
相比于数组,链表具有动态性,可以根据需要动态地分配和释放内存空间。
链表的基本概念包括头节点、尾节点、节点插入和节点删除等。
二、链表的实现1. 定义节点结构体在C语言中,我们可以通过定义结构体来表示链表的节点。
结构体中包含一个数据成员和一个指向下一个节点的指针成员。
2. 创建链表为了创建一个链表,我们首先需要定义一个头节点,并将其指针指向NULL。
然后,通过动态分配内存,创建其他节点,并将它们按照一定的顺序链接起来。
3. 插入节点链表的插入操作可以在链表的任意位置进行。
我们可以在头节点之后或者指定节点之后插入新的节点。
插入操作的关键是修改指针的指向,使得新节点能够正确地链接到链表中。
4. 删除节点链表的删除操作可以删除链表中的任意节点。
删除操作的关键是修改指针的指向,使得被删除节点的前一个节点和后一个节点能够正确地链接起来,并释放被删除节点的内存空间。
三、链表的应用链表作为一种常见的数据结构,有着广泛的应用。
以下是链表的一些常见应用场景:1. 队列和栈链表可以用来实现队列和栈这两种常见的数据结构。
通过在链表的头部或尾部进行插入和删除操作,可以实现队列和栈的基本功能。
2. 图的表示在图的表示中,链表可以用来表示图的邻接表。
每个顶点对应一个链表,链表中存储该顶点的邻接点。
通过链表的插入和删除操作,可以方便地修改图的结构。
3. 文件系统在文件系统中,链表可以用来表示文件的目录结构。
每个目录对应一个链表,链表中存储该目录下的文件和子目录。
通过链表的插入和删除操作,可以方便地管理文件和目录。
顺序表的操作实验报告顺序表的操作实验报告一、引言顺序表是一种常见的数据结构,它在计算机科学中被广泛应用。
本实验旨在通过实际操作顺序表,探索其基本操作和性能。
二、实验目的1. 理解顺序表的基本原理和数据结构;2. 掌握顺序表的插入、删除、查找等操作;3. 分析顺序表操作的时间复杂度。
三、实验过程1. 初始化顺序表:首先,我们创建一个空的顺序表,并设定其初始长度为10。
2. 插入元素:在顺序表中插入若干个元素,观察插入操作的效果。
我们可以通过在表尾插入元素,或者在表中间插入元素来测试插入操作的性能。
3. 删除元素:从顺序表中删除指定位置的元素,并观察删除操作的效果。
我们可以选择删除表尾元素或者表中间元素来测试删除操作的性能。
4. 查找元素:在顺序表中查找指定元素,并返回其位置。
我们可以选择查找表头元素、表尾元素或者表中间元素来测试查找操作的性能。
5. 扩容操作:当顺序表的长度不足以容纳更多元素时,我们需要进行扩容操作。
在实验中,我们可以在插入元素时观察到扩容操作的效果。
四、实验结果与分析1. 初始化顺序表:成功创建了一个长度为10的空顺序表。
2. 插入元素:通过在表尾插入10个元素,我们观察到插入操作的时间复杂度为O(1)。
然而,当我们在表中间插入元素时,需要将插入位置之后的所有元素后移,时间复杂度为O(n)。
3. 删除元素:从表尾删除元素的时间复杂度为O(1),而从表中间删除元素需要将删除位置之后的所有元素前移,时间复杂度为O(n)。
4. 查找元素:在顺序表中查找元素的时间复杂度为O(n),因为需要逐个比较每个元素。
5. 扩容操作:当顺序表的长度不足以容纳更多元素时,我们需要进行扩容操作。
在实验中,我们观察到扩容操作的时间复杂度为O(n),因为需要将原有元素复制到新的更大的空间中。
五、实验总结通过本次实验,我们深入了解了顺序表的基本操作和性能。
顺序表的插入、删除和查找操作的时间复杂度与操作位置有关,需要注意选择合适的操作位置以提高效率。
数据结构实验一顺序表实验报告一、实验目的本次实验的主要目的是通过实现顺序表的基本操作,深入理解线性表的逻辑结构和存储结构,掌握顺序表的插入、删除、查找等操作的实现方法,提高编程能力和问题解决能力。
二、实验环境本次实验使用的编程语言为 C 语言,编程环境为 Visual Studio 2019。
三、实验原理顺序表是一种线性表的存储结构,它使用一组连续的存储单元依次存储线性表中的元素。
在顺序表中,元素的逻辑顺序与物理顺序是一致的。
顺序表的基本操作包括初始化、插入、删除、查找、遍历等。
在实现这些操作时,需要考虑顺序表的存储空间是否已满、插入和删除元素时元素的移动等问题。
四、实验内容(一)顺序表的定义```cdefine MAXSIZE 100 //定义顺序表的最大长度typedef struct {int dataMAXSIZE; //存储顺序表的元素int length; //顺序表的当前长度} SeqList;```(二)顺序表的初始化```cvoid InitList(SeqList L) {L>length = 0;}```(三)顺序表的插入操作```cint InsertList(SeqList L, int i, int e) {if (L>length == MAXSIZE) {//顺序表已满return 0;}if (i < 1 || i > L>length + 1) {//插入位置不合法return 0;}for (int j = L>length; j >= i; j) {//移动元素L>dataj = L>dataj 1;}L>datai 1 = e; //插入元素L>length++;return 1;}```(四)顺序表的删除操作```cint DeleteList(SeqList L, int i, int e) {if (L>length == 0) {//顺序表为空return 0;}if (i < 1 || i > L>length) {//删除位置不合法}e = L>datai 1; //取出被删除的元素for (int j = i; j < L>length; j++){//移动元素L>dataj 1 = L>dataj;}L>length;return 1;}```(五)顺序表的查找操作```cint SearchList(SeqList L, int e) {for (int i = 0; i < Llength; i++){if (Ldatai == e) {return i + 1;}}}```(六)顺序表的遍历操作```cvoid TraverseList(SeqList L) {for (int i = 0; i < Llength; i++){printf("%d ", Ldatai);}printf("\n");}```五、实验步骤1、打开 Visual Studio 2019,创建一个新的 C 语言项目。
链表实验报告一、实验目的链表是一种常见的数据结构,本次实验的主要目的是深入理解链表的概念、原理和操作,通过实际编程实现链表的创建、插入、删除、遍历等基本操作,掌握链表在数据存储和处理中的应用,提高对数据结构的理解和编程能力。
二、实验环境本次实验使用的编程语言为 C 语言,开发工具为 Visual Studio Code。
三、实验原理链表是一种动态的数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。
链表的优点是可以灵活地进行插入和删除操作,不需要像数组那样移动大量的数据。
链表分为单向链表、双向链表和循环链表等。
单向链表只有一个指向下一个节点的指针,双向链表有指向前一个节点和后一个节点的指针,循环链表的尾节点指向头节点,形成一个环形结构。
四、实验步骤1、单向链表的创建定义链表节点结构体,包含数据域和指针域。
编写创建链表的函数,通过动态分配内存创建链表节点,并将节点连接起来。
2、单向链表的插入操作实现头部插入、尾部插入和中间插入的函数。
在插入时,需要处理指针的更新,确保链表的连接正确。
3、单向链表的删除操作编写删除指定节点的函数。
删除节点时,要释放被删除节点的内存,并更新相邻节点的指针。
4、单向链表的遍历实现遍历链表并打印节点数据的函数。
5、双向链表的创建与操作类似于单向链表,定义双向链表节点结构体,并实现创建、插入、删除和遍历的函数。
注意双向链表中指针的更新方式与单向链表的不同。
6、循环链表的创建与操作定义循环链表节点结构体,创建循环链表。
实现循环链表的插入、删除和遍历操作,处理好尾节点与头节点的连接。
五、实验结果与分析1、单向链表成功创建了单向链表,并能够正确进行头部、尾部和中间的插入操作。
删除操作也能准确删除指定节点,并释放内存。
遍历输出的结果与预期相符。
2、双向链表双向链表的创建和各种操作都能正常执行,指针的更新没有出现错误。
在双向链表中,插入和删除操作的效率相对单向链表有所提高,因为可以直接通过前向指针进行操作。
实验链表实验报告一、实验目的本次实验的主要目的是深入理解链表这种数据结构的概念、特点和操作方法,并通过实际编程实现来提高对链表的应用能力。
二、实验环境本次实验使用的编程语言为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;}```五、实验结果通过对上述链表操作函数的调用,我们成功地创建、遍历、插入和删除了链表中的节点。
最新数据结构顺序表实验报告心得体会(模板11篇)(经典版)编制人:__________________审核人:__________________审批人:__________________编制单位:__________________编制时间:____年____月____日序言下载提示:该文档是本店铺精心编制而成的,希望大家下载后,能够帮助大家解决实际问题。
文档下载后可定制修改,请根据实际需要进行调整和使用,谢谢!并且,本店铺为大家提供各种类型的经典范文,如合同协议、工作计划、活动方案、规章制度、心得体会、演讲致辞、观后感、读后感、作文大全、其他范文等等,想了解不同范文格式和写法,敬请关注!Download tips: This document is carefully compiled by this editor. I hope that after you download it, it can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you!Moreover, our store provides various types of classic sample essays, such as contract agreements, work plans, activity plans, rules and regulations, personal experiences, speeches, reflections, reading reviews, essay summaries, and other sample essays. If you want to learn about different formats and writing methods of sample essays, please stay tuned!最新数据结构顺序表实验报告心得体会(模板11篇)我们在一些事情上受到启发后,可以通过写心得体会的方式将其记录下来,它可以帮助我们了解自己的这段时间的学习、工作生活状态。
链表的基本操作实验报告链表的基本操作实验报告引言:链表是一种常见的数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。
链表相较于数组拥有更灵活的操作,能够动态地增删节点。
本实验旨在通过实际操作链表,加深对链表基本操作的理解和掌握。
实验目的:1. 理解链表的基本概念和结构;2. 学会链表的插入、删除和遍历操作;3. 掌握链表的相关算法。
实验过程:1. 创建链表首先,我们需要创建一个链表。
链表可以是单链表、双链表或循环链表,本次实验我们选择创建一个单链表。
创建链表的过程如下:(1)定义一个链表的节点结构,包含数据和指向下一个节点的指针;(2)创建头节点,并将头节点的指针指向NULL,表示链表为空。
2. 插入节点链表的插入操作可以在链表的任意位置插入节点。
我们可以选择在链表的头部、尾部或指定位置插入节点。
下面以在链表头部插入节点为例,介绍插入节点的过程:(1)创建一个新节点,设置新节点的数据;(2)将新节点的指针指向原头节点;(3)将头节点的指针指向新节点,完成插入操作。
3. 删除节点链表的删除操作可以删除链表中的任意节点。
同样,我们可以选择删除链表的头部、尾部或指定位置的节点。
以下是删除链表头部节点的步骤:(1)将头节点的指针指向下一个节点,跳过原头节点;(2)释放原头节点的内存空间。
4. 遍历链表链表的遍历操作用于访问链表中的每个节点。
通过遍历链表,我们可以获取链表中的所有数据或执行特定的操作。
链表的遍历操作如下:(1)从链表的头节点开始,依次访问每个节点;(2)对每个节点执行相应的操作,如打印节点的数据。
实验结果:通过以上实验过程,我们成功地创建了一个链表,并实现了链表的插入、删除和遍历操作。
链表的基本操作能够灵活地处理数据,适用于各种场景。
链表的插入和删除操作可以在O(1)时间内完成,相较于数组的插入和删除操作具有更高的效率。
实验总结:链表作为一种常见的数据结构,具有灵活性和高效性的特点。
[线性表链表实验报告]链表线性表实验一:线性表运算的实现班级姓名学号一、实验预备知识1复习C++中编写函数的相关内容。
2复习如何用主函数将多个函数连在一起构成一个C++完整程序。
二、实验目的1掌握线性表的顺序和链式存储结构2熟练运用线性表在顺序存储方式下的初始化、创建、输出、插入和删除运算3熟练运用线性表在链式存储方式下的创建、输出、插入和删除运算三、实验要求1编写初始化并创建线性表和输出线性表的算法。
2编写对线性表插入和删除运算算法,要判断位置的合法性和溢出问题。
3编写一个主函数,将上面函数连在一起,构成一个完整的程序。
4将实验源程序调试并运行,写出输入、输出结果,并对结果进行分析。
四、实验步骤◇顺序表实验内容:1.给定的线性表为L=(12,25,7,42,19,38),元素由键盘输入。
2.初始化并建立顺序表。
3.编写顺序表输出算法。
(内存中开辟的单元数为8)4.依次插入3,21,15三个数,分别插入在第4,6和2位置,每插入一次都要输出一次顺序表。
5.删除第5,第3和第12个位置上的元素,每删除一个元素都要输出一次顺序表。
◇单链表实验内容:1.给定的线性表为L=(12,25,7,42,19,38),元素由键盘输入。
2.建立一个带表头结点的单链表(前插入法和尾插入法都可以)。
3.编写单链表输出算法。
4.依次插入3,21,15三个数,分别插入在第4,6和12位置,每插入一次都要输出一次单链表。
5.删除第5,第3和第12个位置上的元素,每删除一个元素都要输出一次单链表。
五、实验程序◇顺序表实验//LinkList.h#defineMAXSIZE8typedefintDataType;typedefstruct{DataTypedata[MAXSIZE];intlast;}Seqlist;voidcreat_seqlist(Seqlists);voiddisplay_seqlist(Seqlists);intinsert_seqlist(Seqlists,inti,DataTypex);intdelet_seqlist(Seqlists,inti);//LinkList.cpp#include#include”Seqlist.h”voidcreat_seqlist(Seqlists){intx,i=0;coutcinx;while(x!=-1){s.data[i]=x;cinx;i++;}st=i-1;}voiddisplay_seqlist(Seqlists){inti;coutfor(i=0;icoutcout}intinsert_seqlist(Seqlists,inti,DataTypex){intj;if(st==MAXSIZE-1){}st+2){cout=i-1;j--)s.data[j+1]=s.data[j];s.data[i-1]=x;st ++;return1;intdelet_seqlist(Seqlists,inti){intj;if(st+1){coutreturn-1;}for(j=i;js.data[j-1]=s.data[j];st--;return1;}//main.cpp#include#include”Seqlist.h”intmain(){intx,d,s;Seqlists_list;creat_seqlist(s_list);coutd;coutx;s=insert_seqlist(s_list,d,x);if(s==1){coutd;s=delet_seqli st(s_list,d);}if(s==1){cout运行结果:请输入数据(以输入-1结束)12257421938-1顺序表为:12257421938插入操作请输入插入的位置:4请输入要插入的数据:3插入后的顺序表为:122573421938请输入插入的位置:6请输入要插入的数据:21插入后的顺序表为:12257342211938请输入插入的位置:2请输入要插入的数据:15表满!删除操作请输入删除元素的位置:5删除后的顺序表为:122573211938请输入删除元素的位置:3删除后的顺序表为:12253211938请输入删除元素的位置:12不存在该元素!Pressanykeytocontinue◇单链表实验//LinkList.htypedefintDataType;typedefstructNode{DataTypedata;structNode*next;}LNode,*LinkList;voidCreat_LinkList(LinkListL);//创建链表voidShow_LinkList(LinkListL);//显示数据LNode*Get_LinkList(LinkListL,inti);//获得第i个结点的地址intInsert_linklist(LinkListL,inti,DataTypex);//插入结点intDelete_LinkList(LinkListL,inti);//删除结点//LinkList.cpp#include#include”LinkList.h”voidCreat_LinkList(LinkListL){LNode*s;L=NULL;s=newLNode;s-next=L;L=s;intx;}//头插法创建带头结点的链表coutx;while(x!=-1){s=newLNode;s-next=L;L-data=x;L=s;cinx;} voidShow_LinkList(LinkListL){LNode*p;p=L-next;while(p!=NULL){coutdatap=p-next;//显示数据}cout}LNode*Get_LinkList(LinkListL,inti){intj=1;LNode*q;q=L-next;while(q!=NULLjq=q-next;j++;}returnq;}//获得第i个结点的地址intInsert_LinkList(LinkListL,inti,DataTypex)//插入结点{ LNode*p,*s;p=Get_LinkList(L,i-1);if(p==NULL){}coutdata=x;s-next=p-next;p-next=s;return1;}intDelete_LinkList(LinkListL,inti){LNode*p,*s;p=Get_LinkList(L,i-1);if(p==NULL){//删除结点coutnext==NULL){coutreturn0;}else{s=p-next;p-next=s-next;deletes;return1;}}//main.cpp#include#include”LinkList.h”intmain(){intx,d,s;LinkListH;Creat_LinkList(H);Show_LinkList(H);}coutd;coutx;s=Insert_LinkList(H,d,x);if(s==1){coutd;s=Delete_Lin kList(H,d);if(s==1){cout运行结果:请输入数据(以输入-1结束)12257421938-1单链表为:38194272512插入操作请输入插入的位置:4请输入要插入的数据:3插入后的单链表为:381942372512请输入插入的位置:6请输入要插入的数据:21插入后的单链表为: 38194237212512请输入插入的位置:12请输入要插入的数据:15插入位置错误!删除操作请输入删除元素的位置:5删除后的单链表为:3819423212512请输入删除元素的位置:3删除后的单链表为:38193212512 请输入删除元素的位置:12插入位置的前驱结点不存在!。
顺序表的基本操作一、实验目的1、复习C++语言程序设计中的知识。
2、熟悉线性表的逻辑结构。
3、熟悉线性表的基本运算在两种存储结构上的实现。
4、掌握顺序表的存储结构形式及其描述和基本运算的实现。
5、熟练掌握动态链表结构及有关算法的设计二、实验内容实现顺序表的建立、取元素、修改元素、插入、删除等顺序表的基本操作。
[基本要求](1).依次从键盘读入数据,建立带头结点的顺序表;(2).输出顺序表中的数据元素(3).根据指定条件能够取元素和修改元素;(4).实现在指定位置插入和删除元素的功能。
三、实验步骤、调试及输出结果(—) . 数据结构与核心算法的设计描述:#include <stdio.h>#include <stdlib.h>/*顺序表的定义:*/#define ListSize 100typedef struct{int elem[ListSize]; /*向量elem用于存放表结点*/int length; /*当前的表长度*/}SeqList;/*顺序表的建立:*/void CreateList(SeqList *L,int n){int i;printf("please input n numbers:\n");for(i=1;i<=n;i++)scanf("%d",&L->elem[i]);L->length=n;}/*顺序表的打印:*/void PrintList(SeqList *L,int n){int i;printf("the sqlist is\n");for(i=1;i<=n;i++)printf("%d ",L->elem[i]);printf("\n");}/*顺序表的查找:*/int LocateList(SeqList *L,int x){int i;i=1;while (((L->elem[i])!=x) &&(i<=10)) ++i;if ((L->elem[i])==x) return(i);else return(0);}/*顺序表的插入:*/void InsertList(SeqList *L,int x,int i) {int j;if (i<1 ||i>L->length+1)printf("no insert position!\n"); else{for(j=L->length;j>=i;j--)L->elem[j+1]=L->elem[j];L->elem[i]=x;L->length++;}}/*顺序表的删除:*/void DeleteList(SeqList *L,int i){int j;if (i<1 ||i>L->length)printf("no delete position!\n");else{for(j=i;j<=(L->length)-1;j++)L->elem[j]=L->elem[j+1];L->length--;}}void main(){SeqList L;int i,x;int n=10; /*当前顺序表的长度*/L.length=0;CreateList(&L,n); /*建立顺序表*/PrintList(&L,L.length); /*输出顺序表*/ printf("input the research element:");scanf("%d",&x);i=LocateList(&L,x); /*顺序表查找*/printf("the research position is %d\n",i);printf("input the position of insert:");scanf("%d",&i);printf("input the value of insert:");scanf("%d",&x);InsertList(&L,x,i); /*顺序表插入*/PrintList(&L,L.length); /*输出顺序表*/ printf("input the position of delete:");scanf("%d",&i);DeleteList(&L,i); /*顺序表删除*/PrintList(&L,L.length); /*输出顺序表*/ }(二). 调试及输出结果测试数据:1、输入n个数;2、输出顺序列表;3、顺序表的查找;4.顺序表的插入;5、顺序表的删除;数据测试如下截图:四、实验讨论与总结:通过这次写实验报告,我深切的理解了这门课的本质。
数据结构实验报告之链表顺序表的操作1、编写程序实现顺序表的各种基本运算:初始化、插⼊、删除、取表元素、求表长、输出表、销毁、判断是否为空表、查找元素。
在此基础上设计⼀个主程序完成如下功能:(1)初始化顺序表L;(2)依次在表尾插⼊a,b,c,d,e五个元素;(3)输出顺序表L;(4)输出顺序表L的长度;(5)判断顺序表L是否为空;(6)输出顺序表L的第4个元素;(7)输出元素c的位置;(8)在第3个位置上插⼊元素f,之后输出顺序表L;(9)删除L的第2个元素,之后输出顺序表L;(10)销毁顺序表L。
2、编写程序实现单链表的各种基本运算:初始化、插⼊、删除、取表元素、求表长、输出表、销毁、判断是否为空表、查找元素。
在此基础上设计⼀个主程序完成如下功能:(1)初始化单链表L;(2)依次在表尾插⼊a,b,c,d,e五个元素;(3)输出单链表L;(4)输出单链表L的长度;(5)判断单链表L是否为空;(6)输出单链表L的第4个元素;(7)输出元素c的位置;(8)在第3个位置上插⼊元素f,之后输出单链表L;(9)删除L的第2个元素,之后输出单链表L;(10)销毁单链表L。
1顺序表2 #include<stdio.h>3 #include<malloc.h>4 #include<stdlib.h>56#define TRUE 17#define FALSE 08#define OK 19#define ERROR 010#define INFEASIBLE -111#define OVERFLOW -212 typedef int Status;13 typedef char ElemType;1415#define LIST_INIT_SIZE 100 //线性表存储空间的初始分配量16#define LISTINCREMENT 10 //线性表存储空间的分配增量17 typedef struct {18 ElemType *elem; //存储空间基地址19int length; //当前长度20int listsize; //当前分配的存储容量21 } SqList;2223 Status InitList_Sq(SqList &L) { //算法2.324 L.elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType));25if (!L.elem) exit(OVERFLOW); //存储分配失败26 L.length = 0; //空表长度为027 L.listsize = LIST_INIT_SIZE; //初始存储容量28return OK;29 }//InitList_Sq3031 Status ListInsert_Sq(SqList &L, int i, ElemType e) { //算法2.432 ElemType *newbase, *p, *q;33if (i<1 || i>L.length + 1) return ERROR; //i值不合法34if (L.length >= L.listsize)35 { //当前存储空间已满,增加分配36 newbase = (ElemType*)realloc(L.elem, (L.listsize + LISTINCREMENT) * sizeof(ElemType));37if (!newbase) exit(OVERFLOW); //存储分配失败38 L.elem = newbase; //新基址39 L.listsize += LISTINCREMENT; //增加存储容量40 }41 q = &(L.elem[i - 1]); //q为插⼊位置42for (p = &(L.elem[L.length - 1]); p >= q; --p) *(p + 1) = *p; //元素右移43 *q = e; //插⼊e44 ++L.length; //表长增145return OK;46 }4748void DispSqList(SqList L)49 {50int i;51for (i = 0; i < L.length; i++)52 printf("%c ", L.elem[i]);53 }5455 Status ListDelete(SqList &L, int i, ElemType &e)56 {57 ElemType *p,*q;58if ((i < 1) || (i > L.length)) return ERROR;59 p = &(L.elem[i - 1]);60 e = *p;61 q = L.elem + L.length - 1;62for (++p; p <= q; ++p)63 *(p - 1) = *p;64 --L.length;65return OK;66 } //ListDelete_Sq6768 Status GetElem(SqList L, int i, ElemType &e)69 {70if (L.length == 0 || i<1 || i>L.length)71return ERROR;72 e = L.elem[i - 1];73return OK;74 }7576int ListLength(SqList L)77 {78return(L.length);79 }8081 Status DestroyList(SqList &L)82 {83 free(L.elem);84 L.length = 0;85return OK;86 }8788 Status ListEmpty(SqList L)89 {90return(L.length == 0);91 }9293int LocateElem(SqList L, ElemType e)94 {95int i = 0;96while (i < L.length && L.elem[i] != e) i++;97if (i >= L.length) return0;98else return i + 1;99 }100101void main()102 {103 SqList h;104 ElemType e;105 InitList_Sq(h);106 ListInsert_Sq(h, h.length + 1, 'a');107 ListInsert_Sq(h, h.length + 1, 'b');108 ListInsert_Sq(h, h.length + 1, 'c');109 ListInsert_Sq(h, h.length + 1, 'd');110 ListInsert_Sq(h, h.length + 1, 'e');111 DispSqList(h);112 printf("%d\n\n",ListLength(h));113 ListEmpty(h);114if (ListEmpty(h))116 printf("Empty\n\n");117 }118else119 {120 printf("Not empty\n\n");121 }122 GetElem(h, 4, e);123 printf("%c\n", e);124 printf("%d\n",LocateElem(h, 'c'));125 ListInsert_Sq(h,3,' f');126 DispSqList(h);127 ListDelete(h, 2, e);128 DispSqList(h);129 DestroyList(h);130 }131132133134135136单链表137138139140 #include<stdio.h>141 #include<malloc.h>142 #include<stdlib.h>143144#define TRUE 1145#define FALSE 0146#define OK 1147#define ERROR 0148#define INFEASIBLE -1149#define OVERFLOW -2150 typedef int Status;151152 typedef char ElemType;153154155 typedef struct LNode {156 ElemType data;157int length;158struct LNode *next;159 }LNode, *LinkList;160161162 Status InitList_L(LinkList &L) {163 L = (LinkList)malloc(sizeof(LNode));164 L->next = NULL;165return OK;166 }167168 Status ListInsert_L(LinkList L, int i, ElemType e) { 169 LinkList p = L,s;170int j = 0;171while (p && j < i - 1)172 {173 p = p->next;174 ++j;175 }176if (!p || j > i - 1)177 {178return ERROR;179 }180else181 {182 s = (LinkList)malloc(sizeof(LNode));183 s->data = e;184 s->next = p->next;185 p->next = s;186return OK;187 }188 }189190void DispList_L(LinkList L)191 {192 LinkList p = L->next;193while (p != NULL)194 {195 printf("%c\n", p->data);196 p = p->next;197 }198200201void DestoryList(LinkList &L)202 {203 LinkList p = L, q = p->next;204while (q != NULL)205 {206 free(p);207 p = q;208 q = p->next;209 }210 free(p);211 }212213 Status ListLength_L(LinkList L) {214 LinkList p = L; int n = 0;215while (p->next != NULL)216 {217 n++;218 p = p->next;219 }220return (n);221 }222223 Status ListDelete(LinkList L, int i, ElemType &e){ 224int j;225 LinkList p, q;226 p = L;227 j = 1;228while (p->next && j < i)229 {230 p = p->next;231 ++j;232 }233if (!(p->next) || j > i)234 {235return ERROR;236 }237 q = p->next;238 p->next = q->next;239 e = q->data;240 free(q);241return OK;242 }243244 Status ListEmpty_L(LinkList L)245 {246return(L->length == 0);247 }248249 Status GetElem(LinkList L, int i, ElemType &e) 250 {251int j;252 LinkList p;253 p = L->next;254 j = 1;255while (p&&j<i)256 {257 p = p->next;258 ++j;259 }260if (!p || j > i)261 {262return ERROR;263 }264 e = p->data;265return OK;266 }267268 Status LocateElem(LinkList L, int e)269 {270 LinkList p = L;271int n=0;272//p->length = 0;273while (p != NULL)274 {275if(p->data != e)276 {277 p = p->next;278 n++;279 }280else281 {282break;283 }284 }285if(p != NULL)286 {287return n;288 }289else290 {291return ERROR;292 }293 }294295void main()296 {297 LinkList h;298 ElemType e;299 InitList_L(h);300 ListInsert_L(h, 1, 'a');301 ListInsert_L(h, 2, 'b');302 ListInsert_L(h, 3, 'c');303 ListInsert_L(h, 4, 'd');304 ListInsert_L(h, 5, 'e');305 DispList_L(h);306 printf("%d\n", ListLength_L(h)); 307if (ListEmpty_L(h))308 {309 printf("Empty\n\n");310 }311else312 {313 printf("Not empty\n\n");314 }315 GetElem(h, 4, e);316 printf("%c\n", e);317 printf("%d\n", LocateElem(h, 'c')); 318 ListInsert_L(h, 3, 'f');319 DispList_L(h);320 ListDelete(h, 2, e);321 DispList_L(h);322 DestoryList(h);323 }。
顺序表的实验报告顺序表的实验报告一、引言顺序表是一种常见的数据结构,它可以用来存储一组具有相同数据类型的元素,并且这些元素在内存中是连续存储的。
在本次实验中,我们将通过编写一个简单的顺序表程序来深入了解顺序表的原理和使用方法。
二、实验目的1. 掌握顺序表的基本概念和特点;2. 熟悉顺序表的操作,包括插入、删除、查找等;3. 理解顺序表的存储结构和算法。
三、实验过程1. 定义顺序表结构首先,我们需要定义一个顺序表的结构。
顺序表由两部分组成:一个数组用于存储元素,一个变量用于记录当前元素个数。
我们可以使用C语言的结构体来定义顺序表结构:```c#define MAX_SIZE 100 // 定义顺序表的最大容量typedef struct {int data[MAX_SIZE]; // 用数组存储元素int length; // 记录当前元素个数} SeqList;```2. 初始化顺序表在使用顺序表前,我们需要对其进行初始化,即将长度置为0。
可以编写一个初始化函数来完成这个操作:```cvoid init(SeqList *list) {list->length = 0;}```3. 插入元素顺序表的插入操作是将一个元素插入到指定位置上,并将后面的元素依次后移。
我们可以编写一个插入函数来实现这个操作:```cvoid insert(SeqList *list, int position, int value) {if (position < 0 || position > list->length) {printf("插入位置无效!\n");return;}if (list->length >= MAX_SIZE) {printf("顺序表已满,无法插入!\n");return;}for (int i = list->length; i > position; i--) {list->data[i] = list->data[i - 1];}list->data[position] = value;list->length++;}```4. 删除元素顺序表的删除操作是将指定位置上的元素删除,并将后面的元素依次前移。
数据结构实验报告顺序表数据结构实验报告:顺序表一、引言数据结构是计算机科学的重要基础,它研究数据的组织方式和操作方法。
顺序表是一种常见的数据结构,它以数组的形式存储数据元素,具有随机访问和插入删除方便的特点。
本实验旨在深入理解顺序表的实现原理和操作方法,并通过实验验证其性能。
二、实验目的1. 掌握顺序表的基本概念和实现原理;2. 熟悉顺序表的插入、删除、查找等操作;3. 分析顺序表的时间复杂度,并进行性能测试。
三、实验过程1. 顺序表的定义和初始化顺序表是一种线性表,它以一组连续的存储单元来存储数据元素。
在实验中,我们使用数组来实现顺序表。
首先,定义一个结构体来表示顺序表,包括数据元素和当前长度等信息。
然后,通过动态分配内存来初始化顺序表。
2. 插入元素顺序表的插入操作是将一个新元素插入到指定位置,同时移动后面的元素。
在实验中,我们可以通过循环将后面的元素依次向后移动,然后将新元素放入指定位置。
3. 删除元素顺序表的删除操作是将指定位置的元素删除,并将后面的元素依次向前移动。
在实验中,我们可以通过循环将后面的元素依次向前移动,然后将最后一个元素置为空。
4. 查找元素顺序表的查找操作是根据指定的值查找元素所在的位置。
在实验中,我们可以通过循环遍历顺序表,逐个比较元素的值,找到匹配的位置。
五、实验结果与分析在实验中,我们通过插入、删除、查找等操作对顺序表进行了测试,并记录了操作所需的时间。
通过分析实验结果,我们可以得出以下结论:1. 顺序表的插入操作的时间复杂度为O(n),其中n为元素的个数。
因为插入操作需要移动后面的元素,所以时间复杂度与元素个数成正比。
2. 顺序表的删除操作的时间复杂度也为O(n),与插入操作相同,需要移动后面的元素。
3. 顺序表的查找操作的时间复杂度为O(n),需要逐个比较元素的值。
六、结论通过本次实验,我们深入理解了顺序表的实现原理和操作方法。
顺序表以数组的形式存储数据,具有随机访问和插入删除方便的特点。
}DataType; // 学生的结构
实验报告 实验目的: 学生管理系统(顺序表) 实验要求: 1. 建表
2. 求表长
3. 插入
4. 查找
5. 删除
6. 列表
7. 退出
源程序: #include #include #include #define MaxSize 1000 typedef struct { char xh[40];
char xm[40]; int cj;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<=n-1;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(" 第%睢学生:”,w); printf("%s %s %d\n",L->data[k].xh,L->data[k].xm,L->da ta[k].cj); } }
int cr(SqList *L,DataType *xs,int i) // 信息
int j;
插入 if(L->length==MaxSize) { printf(" 没有 !");
return 0; } else if((i<0)||(i>L->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;
}
char xh[40]; char xm[40]; int cj; int i=0,u; printf(" 1 printf(" 1 printf(" 1 printf(" 请选择: "); fflush(stdin); scanf("%d",&u); if (u==1) { printf(" 请输入要查找学生的学号:
");
scanf("%s",xh); for(i=0;ilength;i++)
int cz(SqList *L) // { 查找信息
、按学号查询 、按姓名查询 、按成绩查询
\n"); \n"); \n"); {
if(strcmp(L->data[i].xh,xh)==0) return i; } } if (u==2)
{ printf(" 请输入要查找学生的姓名: ");
scanf("%s",xm); for(i=0;ilength;i++) { if(strcmp(L->data[i].xm,xm)==0)
return i; } } if (u==3)
{ printf(" 请输入要查找学生的成绩: ");
scanf("%s",cj); for(i=0;ilength;i++)
if(L->data[i].cj,&cj) return i;}
{ return -1;//* 如果没找到,返回 -1 }
int cz2(SqList *L) // 删除查找的函数
{ char xh[40];
char xm[40]; int i=0,h; printf(" 1 、按 学 号 删除 \n"); printf(" 2 、按 姓 名 删除 \n"); printf(" 请选择: "); fflush(stdin); scanf("%d",&h); if (h==1)
{ printf(" 请输入要删除学生的学号: ");
scanf("%s",xh); for(i=0;ilength;i++){
if(strcmp(L->data[i].xh,xh)==0) // 已知学号一样不 return i; } } else if (h==2)
{ printf(" 请输入要删除学生的姓名: ");
scanf("%s",xm); for(i=0;ilength;i++) { if(strcmp(L->data[i].xm,xm)==0) // 断输入姓名和
已知姓名一样不 return i; } } return -1;
}
void sc(SqList *L) // 删除函数
int i,j;
判断输入和 {
printf(" 请先选择您要删除的学生信息的方式: \n"); scanf("%d",&j); i=cz2(L); if(i==-1) { printf(" 没有查到要删除的学生信息 ");
return; } for(j=i;jlength;j++) // 生以后的学生整体上调一位
{ L->data[j].cj=L->data[j+1].cj; // 个覆盖了前一个
strcpy(L->data[j].xh,L->data[j+1].xh); strcpy(L->data[j].xm,L->data[j+1].xm); } L->length--;
printf(" 该学生信息已被删除! \n"); } int bc(SqList *L)
return (L->length);
要删除学 就是后一 int main() // 主体大函数
{ int i,k;
SqList *L; // 定义顺序表的指针
DataType *xs; L=(SqList *)malloc(sizeof(SqList)*MaxSize);
printf(" char q; ee: rewind(stdin); { 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(" 退出请按 0 \n"); { 请输入 "); scanf("%c",&q); } if(q=='1')
{ rewind(stdin); liebiao(L);
goto ee;
} if(q=='2')
{ rewind(stdin);
bc(L); prin tf("共%小个学生 \n",L->le ngth); goto ee; } if(q=='3')