zoukankan      html  css  js  c++  java
  • 顺序存储结构的查增删

      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 */
  • 相关阅读:
    Git基操
    阿里云Centos7安装mysql5.7
    Centos安装jdk8
    BD-rate/BD-BitRate/BDBR/BD-PSNR
    应用统计作业(1)——概率统计知识求解以定积分的近似值
    标量对向量、标量对矩阵、向量对向量、矩阵对矩阵的求导和微分计算
    JM8.6(H.264编码器)源码注释——码率控制部分主要推导
    二、全国大学生电子设计竞赛测控(无人机)方向___赛题分析
    C#-WebForm-Request、Response、QueryString
    webform 页面传值的方法总结
  • 原文地址:https://www.cnblogs.com/rsapaper/p/6034690.html
Copyright © 2011-2022 走看看