顺序存储结构的查增删

  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-10-13 16:36:48

顺序存储结构的查增删的相关文章

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

小学生放学都是要按顺序排队的,一个接一个,每个小学生的前后位置是固定的,这样便于迅速清点. 其实这就是一个线性表,从这件事里我们就可以找到很多关于线性表的特性,如 1.线性表是一个序列,它是有顺序的(排队) 2.第一个元素无前驱,最后一个无后继,其他每个元素都有一个前驱和后继(一个接一个) 3.元素是有限的(小学生的个数是有限的) 4.数据类型都相同(都是小学生在排队) 说明白线性表示什么,下面我们直接看线性表的实现 线性表的实现分顺序存储结构和链式存储结构 顺序存储结构: #define LI

线性表之顺序存储结构(C语言动态数组实现)

线性表的定义:N个数据元素的有限序列 线性表从存储结构上分为:顺序存储结构(数组)和 链式存储结构(链表) 顺序存储结构:是用一段连续的内存空间存储表中的数据 L=(a1,a2,a3....an) 链式存储结构:是用一段一段连续的内存空间存储表中每一行的数据,段与段之间通过一个引用(指针)相互连接来,形成一个链式的存储结构 看到顺序存储结构的图示,我们可能会马上联想到C语言的数组.是的,数组就是一种典型的顺序存储数据结构.下面我通过一个实例,来实现对顺序存储结构中的数据增.删.改.查的操作. 首

第十六课、顺序存储结构的抽象实现----------狄泰软件学院

一.课程目标 1.完成顺序存储结构的抽象实现,既然是抽象实现,自然就是抽象类,不能生成对象 (1).抽象类模板,存储空间的位置和大小由子类完成  (2).这里只实现顺序存储结构的关键操作(增.删.查等) (3).提供数组操作符,方便快速获取元素(要提供const版本的,方便const对象调用) 二.具体实现 这里需注意几点 (1).这里将capacity()函数设置为纯虚函数,说明在这里还不需要实现它,将其留到子类中在实现. (2).数组操作符的返回值一个是引用一个是值,是因为const对象不能

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

大话数据结构 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

数据结构(03)_顺序存储结构线性表

本节我们基于前面实现的数据结构类模板基础,继续完成基于顺序存储结构的线性表的实现,话不多说,继承关系图如下: 14.线性表的本质和操作 14.1.线性表的表现形式 零个多多个数据元素组成的集合 数据元素在位置上是有序排列的 数据元素的个数是有限的 数据元素的类型必须相同 14.2.线性表的抽象定义.性质 线性表是具有相同类型的n(>=)个数据元素的有限序列,(a0, a1, a2... an-1),其中ai是表项,n是表长度.性质: a0为线性表的第一个元素,只有一个后继 an-1为线性表的最后

线性表的本质、操作及顺序存储结构(六)

我们说到线性表,可能好多人还不太理解.那么我们举个例子来说,在幼儿园中,老师们总会让小朋友以同样的派对秩序出行,这个例子的本质就是线性表. 那么线性表(List)的表现形式是怎样的呢?符合以下几个特征:1.零个或多个数据元素组成的集合:2.数据元素在位置上是有序排列的:3.数据元素的个数是有限的:4.数据元素的类型必须是相同的.那么线性表的抽象定义是怎么定义的呢?线性表是具有相同类型的 n( ≥ 0 ) 个数据元素的有限序列.如下 下来我们来看看 List 的本质:1.a0 为线性表的第一个元素

顺序存储结构的抽象实现

完成顺序存储结构线性表的抽象实现 在SeqList中的关键操作都已经实现了,但它还是一个抽象类,为什么呢?顺序存储空间的指定并没有在SeqList中完成,由StaticList和DynamicList这两个子类中完成. SeqList设计要点——抽象类模板,存储空间的位置和大小由子类完成——实现顺序存储结构线性表的关键操作(增,删,查,等)——提供数组操作符,方便快速获取元素 template <typename T> class SeqList: public List<T> {

数据结构——线性表顺序存储结构

 关于线性表 线性表是零个或者多个数据元素的集合.它主要有以下三个特征: 1:线性表的数据元素之间是有顺序的. 2:线性表中数据元素个数是有限的. 3:线性表中数据元素数据类型是相同的. 关于线性表的操作,主要有 创建线性表.销毁线性表.清空线性表.将元素插入线性表.将元素从线性表中删除.获取线性表中某个位置的元素.获取线性表的长度. 线性表主要有两种存储结构: 1:线性表的顺序存储结构,c语言中的数组及采用这种方式. 2:线性表的链式存储结构. 关于顺序存储结构 定义: 是指用一段地址连续的内

大话数据结构---顺序存储结构的线性表

线性表的定义:零个或多个数据元素的有限序列. 定义的解读: 首先是由一组数据元素组成,可以基本数据类型,也可以使自定义的类型, 有限的个数,当然可以是0个,也就是空表呗, 还有一个特点就是有序 这么一看线性表抽象出来就和生活中的排队一样,一群小朋友站成一队,每个人都知道自己站在第几个,自己的前面是谁,后面谁,除了排头排位的两个数据,每个数据都有唯一的前驱和后继. 线性表的分类 今天先学习一下顺序存储结构,顺序存储结构指的就是用一段地址连续的存储单元依次存储线性表的数据元素: 这么一看线性表挺像数