顺序存储结构存取、插入、删除的时间复杂度

大话数据结构

  1 /*
  2 顺序存储的结构
  3 */
  4 #define MAXSIZE 20
  5 //存储空间初始分配量
  6 typedef int ElemType;
  7 //ElemType类型根据实际情况而定,这里假设为int
  8 typedef struct {
  9     ElemType data[MAXSIZE];
 10 //    数组存储数据元素,最大值为MAXSIZE
 11     int length;
 12 //    线性表当前长度
 13 } SqList;
 14 /*
 15 地址计算方法
 16
 17 每个数据元素,不管是整形、实型、字符型,它们都要占用一定的存储单元。
 18 假设为c单元,那么线性表中第i个数据元素和第i+1个数据元素的存储位置满足
 19 下列关系(LOC表述获得存储位置的函数):
 20 LOC(a_i_) = LOC(a_i-1_)+c
 21 (_表示下标的起始标志)
 22 LOC(a_i) = LOC(a_1_)+(i-1)*c
 23
 24 计算线性表中任意位置的地址,时间相同。
 25 对每个线性表位置的存入或者取出数据,对于计算机而言,均为相等的时间,为一个常熟。
 26 时间复杂度
 27 存取时间性能
 28 O(1)
 29
 30 */
 31
 32 /*
 33 顺序存储结构的插入与删除
 34 */
 35
 36 /*获得元素的操作*/
 37 #define OK 1
 38 #define ERROR 0
 39 #define TRUE 1
 40 #define FALSE 0
 41 typedef int Status;
 42 //Status 是函数的类型,其值是函数结果状态码,如OK
 43 //初始条件:顺序线性表L已存在,1<=i<=ListLength(L)
 44 //操作结果:用e返回L中第i个数据元素的值
 45 Status GetElem(SqList L, int i, ElemType *e) {
 46     if(L.length==0 || i<1 || i>L.length)
 47         return ERROR;
 48     *e=L.data[i-1];
 49     return OK;
 50 }
 51 //GetElem(L,i*e) 查 获得元素操作
 52 //时间复杂度O(1)
 53
 54 /*
 55 插入操作
 56 */
 57
 58 //ListInsert(*L,i,e) 增 添加元素操作
 59 //初始条件:顺序线性表L已存在,i<=i<=ListLength(L)
 60 //操作结果:在L中第i个位置之前插入新的数据元素e,L的长度增加1
 61 Status ListInsert(SqList *L, int i, ElemType e) {
 62     int k;//???improve下移?
 63     if(L->length==MAXSIZE)
 64     //顺序线性表已满
 65         return ERROR;
 66     if(L.length==0 || i<1 || i>L.length)
 67         return ERROR;
 68     if(i<=L->length) {
 69         for(k=L->length-1; k>=i-1; k--)
 70             L->data[k+1] = L->data[k];
 71     }
 72     L->data[i-1]=e;
 73     L->length++;
 74     return OK;
 75 }
 76 /*
 77 删除操作
 78 */
 79
 80 //初始条件:同上
 81 //删除结果:删除L的第i个数据元素,并用e返回其值,L的长度减1
 82 Status ListDelete(SqList *L, int i, ElemType *e) {
 83     int k;
 84     if(L->length==0)
 85     //线性表为空
 86         return ERROR;
 87     if(i<1 || i>L->length)
 88         return ERROR;
 89     *e = L->data[i-1];
 90     if(i<L-length) {
 91         for(k=i; k<L->length; k++)
 92             L->data[k-1]=L->data[k];
 93     }
 94     L->length--;
 95     return OK;
 96 }
 97
 98 /*
 99 插入和删除的时间复杂度
100 最好的情况:元素要插入到最后一个位置或者删除最后一个元素
101             不需要移动元素
102             O(1)
103 最坏的情况:元素要插入到第一个位置或者删除第一个元素
104             需要移动所有元素
105             O(n)
106 每个位置插入或删除呀元素的可能性相同
107 平均复杂度
108 O(n)
109 */
时间: 2024-09-30 22:54:56

顺序存储结构存取、插入、删除的时间复杂度的相关文章

大话数据结构(五)(java程序)——顺序存储结构的插入与删除

获得元素操作 对于线性表的顺序存储结构来说,我们要实现getElement操作,即将线性表的第i个位置元素返回即可 插入操作 插入算法思路: 1.如果插入位置不合理,抛出异常 2.如果插入表的长度大于等于数组长度,则抛出异常或动态增容 3.从最后一位元素开始向前遍历到第i个位置,分别把它们都向后移动一个位置 4.将要插入元素填入位置i处 5.表长度加1 删除操作 1.如果删除位置不合理,抛出异常 2.取出插入元素 3.从删除元素位置开始遍历到最后一个元素位置,分别将它们都向前移动一位 4.表长度

线性表的顺序存储结构及该结构的插入与删除

顺序存储定义 线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素. 顺序存储方式 线性表的顺序存储结构,就是在内存中找了块地儿,通过站位的形式,把一定内存空间给占了,然后把相同数据类型的数据元素依次存放到这块空地中[可通过C中的一维数组来实现顺序存储结构]. 描述顺序存储结构需要三个属性: 1. 存储空间的起始位置:数组 data , 它的存储位置就是存储空间的存储位置 2. 线性表的最大存储容量 3. 线性表的当前长度 数组长度 与 线性表长度区别 - 数组长度: 即

02.线性表(一)顺序存储结构

顺序存储结构 一.线性表基本概念 1.线性表定义 线性表(list)是指零个或多个数据元素的有限序列,所有数据元素为相同数据类型且一个数据元素可以由多个数据项组成.若将线性表记为(a1,..ai-1,ai,ai+1...,an),线性表元素的个数n(n>0,n=0时为空表)定义为线性表的长度,其中ai-1是ai 的直接前驱元素,ai+1是ai的直接后继元素. 2.线性表的抽象数据类型 ADT 线性表(List) Data 线性表的数据对象集合为{a1,a2,....an},每个元素的类型均匀Da

[大话数据结构]线性表之单链表结构和顺序存储结构

线性表定义: 零个或者多个数据元素的有限序列.元素之间是有顺序的,如果元素存在多个,则第一个元素无前驱,最后一个元素无后继.其他每个元素都有且只有一个前驱和后继.并且数据元素的类型要相同. 线性表的抽象数据类型: ADT 线性表(List) Data 线性表的数据对象集合为{a1,a2,...,an},每个元素的类型均为DataType. 其中,除第一个元素a1外,每一个元素有且只有一个直接前驱元素,除了最后一个元素an外,每一个元素有且只有一个直接后继元素. 数据元素之间的关系是一对一的关系.

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

一.线性表的顺序存储需要三个属性 1.存储空间的起始位置 2.线性表的最大存储容量 3.线性表的当前长度 二.线性表的时间复杂度: 线性表的顺序存储结构,在存.读数据时,不管是哪个位置,时间复杂度都是O(1); 插入删除的时间复杂度是O(n),所以线性表适合元素个数不太变化,而更多是存取数据的应用. 三.线性表的结构示意图: 四.代码示例: /*我们的计量方式,除下标从0开始外,其余都从1开始算,所以只有在涉及访问数组的时候,要注意是否要+1 或-1*/ #include <stdio.h>

顺序存储结构的查增删

1 /* 2 顺序存储的结构 3 */ 4 #define MAXSIZE 20 5 //存储空间初始分配量 6 typedef int ElemType; 7 //ElemType类型根据实际情况而定,这里假设为int 8 typedef struct { 9 ElemType data[MAXSIZE]; 10 // 数组存储数据元素,最大值为MAXSIZE 11 int length; 12 // 线性表当前长度 13 } SqList; 14 /* 15 地址计算方法 16 17 每个数

数据结构之线性表之顺序存储结构(3)

1 前言 经过前两张的理论基础,我相信大家都能简单的明白了数据结构和算法一些常用的概念了,从今天开始我们开始学习数据结构中线性表,一起叩响数据结构的大门. 2 详述 线性表(List):零个或者多个数据元素的有限序列. 如果用数学语言来进行定义: (声明:由于下标不是很好弄出来,所以只能表示下面这种方式了,请见谅!) 若线性表记作(a1,...ai-1,ai,ai+1,...,an),则表中ai-1领先于ai,ai领先于ai+1,称ai-1是ai的直接前驱元素,ai+1是ai的直接后继元素.当i

数据结构与算法-总结线性表顺序存储结构的优缺点

这一章节主要总结线性表顺序存储结构的优缺点. 在总结之前,我们来讨论一下线性表顺序存储结构的执行方法的时间复杂度: 存储.读取:O(1) 插入.删除:O(n) 优点: 1.无需为表中的逻辑关系增加额外的存储空间 2.可以快速存取表中对象 缺点: 1.插入和删除需要移动大量的对象 2.存储设备的碎片化 3.当线性表过大的时候,很难确定长度 版权声明:本文为博主原创文章,未经博主允许不得转载.

《大话数据结构》笔记(2)--线性表的顺序存储结构

线性存储结构的Java实现代码: https://github.com/Lyu0709/data-structure/tree/master/src/com/coding/basic/array 第三章 线性表 定义 数学语言 若将线性表记为(a1, ..., ai-1, ai, ai+1, ..., an),则表中ai-1领先于ai,ai领先于ai+1,称ai-1是ai的直接前驱元素,ai+1是ai的直接后继元素.当i=1,2,..,n-1时,ai有且仅有一个直接后继,当n=2,3,...,n