顺序表

C语言实现顺序表(增删)

亡梦爱人 提交于 2020-04-07 23:43:44
内容十分简单,不做过多的文字赘述。 #include<stdio.h> #define MAXSIZE 50 #define ElemType char typedef struct{ ElemType data[MAXSIZE]; int length; }sqlist; void Init(sqlist* l){ l->length = 0; } void CreateList(sqlist* l){ } /** * 顺序表的插入 * :平均时间复杂度O(n) * */ int ListInsert(sqlist* list,int i,ElemType e){ if(i<0||i>list->length+1){ printf("error:位置错误!"); return 0; }else if(list->length>=MAXSIZE){ printf("存储空间已满!"); return 0; }else{ for(int j=list->length;j>=i;j--){ list->data[j] = list->data[j-1]; } list->data[i] = e; list->length++; return 1; } return 0; } /** * 顺序表删除 * 平均时间复杂度:O(n) * */ int ListRemove(sqlist*

数据结构之顺序表的实现

瘦欲@ 提交于 2020-04-06 19:02:41
数据结构之顺序表的实现 一、原理 1.定义 顺序表是在计算机中以数组形式保存的。 2.特点 在计算机中占用连续的一段内存 一旦声明,空间大小一般不变 二、初始化相关操作 包括: 结构体的定义 顺序表的创建 顺序表清空 判断顺序表是否为空 1.结构体定义 即定一个满足顺序表定义的结构体,其中包含 数组、存储长度、总长度。 typedef int ElemType; //将int抽象为ElemType,表明顺序表也可以存储其他类型(如将int改为char) struct List { ElemType *list; //声明数组用于给顺序表存储数据,等价于以下声明方式 //ElemType[] list; int length; //用于记录顺序表存储的数据长度 int MaxSize; //用于记录顺序表最大长度(即最多存储数据) } 2.初始化 对顺序表进行初始化,包括分配自定义长度的数组空间,设定存储长度为0,存储长度为规定值 //初始化,传入需要初始化的顺序表和初始化长度 void InitList(struct List *L,int maxSize){ //初始化长度合法性判断 if(maxSize<0){ printf("初始化长度非法!\n"); exit(1); //退出程序 } //对顺序表长度进行赋值 L->MaxSize = maxSize; /

数据结构-线性表(2)

南笙酒味 提交于 2020-04-03 18:42:00
线性表定义: 线性表是最基本、最简单、也是最经常使用的一种数据结构。 线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其他数据元素都是首尾相接的。 线性表的逻辑结构简单,便于实现和操作。因此,线性表这样的数据结构在实际应用中是广泛採用的一种数据结构。 存储空间是否连续: 一、顺序表的特点是逻辑上相邻的数据元素,物理存储位置也相邻。而且。顺序表的存储空间须要预先分配。 长处: (1)方法简单,各种高级语言中都有数组。easy实现。 (2)不用为表示节点间的逻辑关系而添加额外的存储开销。 (3)顺序表具有按元素序号随机訪问的特点。 缺点: (1)在顺序表中做插入、删除操作时,平均移动表中的一半元素,因此对n较大的顺序表效率低。 (2)须要预先分配足够大的存储空间,预计过大,可能会导致顺序表后部大量闲置;预先分配过小。又会造成溢出。 二、在链表中逻辑上相邻的数据元素,物理存储位置不一定相邻,它使用指针实现元素之间的逻辑关系。而且。链表的存储空间是动态分配的。 长处 :插入、删除运算方便。 缺点: (1)要占用额外的存储空间存储元素之间的关系,存储密度减少。存储密度是指一个节点中数据元素所占的存储单元和整个节点所占的存储单元之比。 (2)链表不是一种随机存储结构。不能随机存取元素 链表的操作: 针对双向链表来说,如图: 删除结点: 代码 : p->prior-

数据结构、算法及线性表总结

独自空忆成欢 提交于 2020-03-28 19:09:16
数据结构、算法及线性表总结 本学期学习了数据结构这门课,为了能够理清学习历程,在此记录学习到的知识,以供参考。 一、本课程的思维导图(持续更新) 二、重要概念的笔记及个人解析 <font color=>第一章:绪论 1)数据结构的定义:数据结构是指所有数据元素以及数据元素之间的关系,可以看作是相互之间存在着某种特定关系的数据元素的集合 (带结构的数据的集合) 2)逻辑结构的定义:逻辑结构是从数据元素的逻辑关系上描述数据的,它与数据的存储无关,是从具体问题中抽象出来的数学模型。 (用来描述数据之间有怎样的关系,或哪种类型的关系) 3)逻辑结构的类型:逻辑结构是多样复杂的,现阶段我们接触到的有 集合 、 线性结构 、 树形结构 以及 图形结构 。(目前学习到线性结构) 4)存储结构的定义:存储结构是数据元素及其关系在计算机存储器中的存储表示也称为物理结构,常用的有 顺序存储 、 链式存储 、 索引存储 和 哈希存储 四中存储结构。 5)顺序存储结构:用该结构存储数据元素,所有数据元素在存储器中占有一整块存储空间, 可将逻辑结构直接映射到存储结构 。(优点:存储效率高,没有额外占用的空间,还可以实现对元素的随机存取。缺点:不便于数据修改,一个元素的变动就可能使其他一系列元素也要进行移动) 6)链式存储结构:每一个数据元素占用的只是一个内存节点,每个节点单独分配,地址也不一定连续

数据结构中顺序表与链表的性能方面比较

会有一股神秘感。 提交于 2020-03-28 06:59:21
一,时间性能的比较 顺序表由数组实现,是一种随机存取结构,对表中任意节点存取操作时间复杂度为O(1)。 而查找链表的节点,须从头指针开始沿链扫描,平均时间复杂度为O(N).因此,若线性表的操作主要是查找,很少进行插入或删除操作,采用顺序比较合适。 对于链表,对某个节点进行插入删除操作只需修改指针,无需大量移动元素,平均时间复杂度为O(1)。而顺序表在插入或删除时,需要大量移动数据元素,平均移动元素的数目为表长的一般,时间复杂度为O(N)。因此,对线性表频繁的进行插入删除操作时,应采用链表。当插入和删除主要在表头或表尾时,应采用循环链表。 表1:时间性能比较 时间复杂度 查找 插入或删除 顺序表 O(1) O(N) 链表 O(N) O(1) 二,空间性能的比较 1, 顺序表的存储空间是静态分配的,必须提前确定其内存大小。常用于存储规模容易确定的线性表。 2, 动态链表的存储空间是动态分配的,只要其内存空间有空闲就不会出现溢出。常用于长度变化较大或长度难以估计的线性表。 3, 定义:存储密度=(节点中数据域占用的空间)/(节点结构占用的存储空间) 有时需考虑存储密度。 综上,在选取线性表时,应综合考虑时间和空间因素,选择一中最适合的。一般而言,顺序表适用于查询,而链表则更便于插入删除管理。 来源: https://www.cnblogs.com/waiting-for/p

K:顺序表和链表的比较

烂漫一生 提交于 2020-03-28 06:55:41
 顺序表和链表是线性表的两种基本实现形式(链表还有多种变化形式),对于这两种实现方式,没有一种方法可以称是最好的,他们各自有着各自的特点和优缺点,适用于不同的应用场景。  与顺序表相比,链表较为灵活,它既不要求在预先分配的一块连续的存储空间中存储线性表的所有数据元素,也不要求按其逻辑顺序来分配存储单元,可根据需要进行存储空间的动态分配。因此,当线性表的长度变化较大或长度难以估计时,宜用链表。但在线性表的长度基本可以预计且变化较小的情况下,宜用顺序表,因为链表的存储密度较顺序表的低,且顺序表具有随机存取的优势。  在顺序表中按序号访问第i个数据元素时的时间复杂度为O(1),而在链表中做同样操作的时间复杂度为O(n)。所以,若要经常对线性表按序号范文数据元素时,顺序表要优先于链表;但在顺序表上做插入和删除操作时,需要平均移动一般的数据元素,而在链表上做插入和删除操作时,不需要移动任何数据元素,虽然要查找插入或删除数据元素的位置,但由于主要是比较操作,所以总体而言,链表要优先于顺序表。  总之,链表比较灵活,插入和删除操作的效率较高,但链表的空间利用率较低,适用于实现动态的线性表;顺序表实现比较简单,因为在任何高级程序语言中都有数组类型,并且空间利用率也较高,可高效的进行随机存取,但顺序表不易扩充,插入和删除操作的效率较低,适合于实现相对“稳定”的静态线性表。 回到目录|·(工)·)

数据结构--线性表之顺序表

假装没事ソ 提交于 2020-03-28 06:53:13
一、引入问题 在程序中,经常需要将一组(通常是同为某个类型的)数据元素作为整体管理和使用,需要创建这种元素组,用变量记录它们,传进传出函数等。一组数据中包含的元素个数可能发生变化(可以增加或删除元素)。 对于这种需求,最简单的解决方案便是将这样一组元素看成一个序列,用元素在序列里的位置和顺序,表示实际应用中的某种有意义的信息,或者表示数据之间的某种关系。 这样的一组序列元素的组织形式,我们可以将其抽象为 线性表 。一个线性表是某类元素的一个集合,还记录着元素之间的一种顺序关系。线性表是最基本的数据结构之一。 二、顺序表概念 将元素顺序地存放在一块连续的存储区里,元素间的顺序关系由它们的存储顺序自然表示 三、顺序表的基本形式 1、顺序表的基本形式: 数据元素本身连续存储,每个元素所占的存储单元大小固定相同,元素的下标是其逻辑地址,而元素存储的物理地址(实际内存地址)可以通过存储区的起始地址Loc (e0)加上逻辑地址(第i个元素)与存储单元大小(c)的乘积计算而得,即:         Loc(ei) = Loc(e0) + c*i 故,访问指定元素时无需从头遍历,通过计算便可获得对应地址,其时间复杂度为O(1)。 2、顺序表的元素外置形式: 如果元素的大小不统一,则须采用图b的元素外置的形式,将实际数据元素另行存储,而顺序表中各单元位置保存对应元素的地址信息(即链接)

C#实现顺序表

主宰稳场 提交于 2020-03-22 03:07:45
这几天需要实现各种数据结构(泛型).主要实现线性表和链表。 线性表是由n(n>=0)个相同类型的数据元素构成的有限序列。除第一个元素外,其余元素只有一个直接前驱;除最后一个元素外,其余元素只有一个直接后继。 顺序表是把表中元素一个接一个地放进一快地址连续的空间,因此顺序表的实现有数组来完成。 由于这次需要实现多种数据结构,各种数据结构都有相同的方法,比如求长度,清空等。因此定义一个公共接口: namespace DateStructrues { public interface IDS<T> { int Count { get;} //求长度 void Clear(); //清空操作 bool IsEmpty{get;} //判断线性表是否为空 } } 线性表接口: namespace DateStructrues.Lists { interface IListDS<T> : IDS<T> { void Append(T item); //附加操作 void Insert(T item, int index); //插入操作 T Delete(int index); //删除操作 T GetElement(int index); //取表元 int Locate(T value); //按值查找 } } 实现顺序表: using System; namespace

开关语句实现顺序表合并(第二章 P26)

爱⌒轻易说出口 提交于 2020-03-17 10:57:18
此程序来着 P26 下面对算法 2.7的分析部分,修改算法2.7的第一个循环语句中的条件语句为开关语句,且当 *pa=*pb时,只将两者中之一插入Lc。则此操作的结果和算法2.1相同,而时间复杂度确不同 。 /* 修改算法2.7的第一个循环语句中的条件语句为开关语句,且当 *pa=*pb时,只将两者中之一插入Lc。此操作的结果和算法2.1相同 */ typedef int Status; /* Status是函数的类型,其值是函数结果状态代码,如OK等 */ typedef int Boolean; /* Boolean是布尔类型,其值是TRUE或FALSE */ typedef int ElemType; #include<malloc.h> /* malloc()等 */ #include<stdio.h> /* EOF(=^Z或F6),NULL */ #include<process.h> /* exit() */ /* 函数结果状态代码 */ #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 //#define OVERFLOW -2 /* -----------------------线性表的动态分配顺序存储结构 -----------------------

数据结构常用头文件之类型定义

落花浮王杯 提交于 2020-03-14 11:15:30
header.h // 顺序表的结构定义 #define Maxsize 100 //const int Maxsize = 100; // 预先定义一个足够大的常数 typedef struct { int data[Maxsize]; // 存放数组的数组 int length; // 顺序表的实际长度 }SeqList; // 顺序表类型名为SeqList // SeqList L 定义L为一个顺序表 Linear.h // 单链表的类型定义 typedef struct node { int data; // 数据域 struct node *next; // 指针域 }Node, *LinkList; // 双向循环链表的类型定义 struct dbnode { int data; struct dbnode *prior, *next; } typedef struct dbnode *dbpointer; typedef dbpointer DLinkList; Seqstack.h #define maxsize 6 //const int maxsize = 6; // 顺序栈 typedef struct seqstack { int data[maxsize]; int top; // 标志栈顶位置的变量 }SeqStk; Lkstack.h // 链栈的定义