• 链表之顺序存储


    顺序存储优点:

    1 不用额外增加新的节点空间

    2 可以快速读取任意位置的元素

    顺序存储缺点:

    1 插入和删除需要移动大量元素

    2 长度变化较大时,难以估计长度

    3 存储空间碎片化

    读取时,时间复杂度为O(1);

    插入删除时,时间复杂度为O(n);

    实例代码

     1 /*Edit by Xhalo*/
     2 #include <stdio.h>
     3 #include <stdlib.h>
     4 
     5 #define MAXSIZE 20
     6 
     7 typedef struct seqList{
     8     int data[MAXSIZE];
     9     int length;
    10 }SL;
    11 
    12 
    13 int initElem(SL *L,int len);
    14 void showElem(SL *L);
    15 int getElem(SL *L,int n);
    16 int insertElem(SL *L,int n,int num);
    17 int deleteElem(SL *L,int n);
    18 
    19 int main()
    20 {
    21     SL * L = (SL *)malloc(sizeof(SL));
    22     /*初始化链表*/
    23     if(initElem(L,10))
    24         return -1;
    25     showElem(L);
    26     /*查找指定的元素*/
    27     printf("the first number is %d
    ",getElem(L,1));
    28     /*插入指定位置的元素*/
    29     if(insertElem(L,4,100))
    30         return -1;
    31     showElem(L);
    32     /*删除指定位置的元素*/
    33     if(deleteElem(L,5))
    34         return -1;
    35     showElem(L);
    36     return 0;
    37 }
    38 int initElem(SL *L,int len){
    39     int i;
    40     for(i=0;i<len;i++){
    41         L->data[i]=i*2+1;
    42     }
    43     L->length = len;
    44     return 0;
    45 }
    46 
    47 void showElem(SL *L){
    48     int len=L->length;
    49     int i;
    50     for(i=0;i<len;i++){
    51         printf("%d ",L->data[i]);
    52     }
    53     printf("
    ");
    54 }
    55 
    56 int getElem(SL *L,int n){
    57     if(L->length == 0 || n<0 || n>L->length)
    58         printf("get List number error!");
    59     return L->data[n-1];
    60 }
    61 
    62 int insertElem(SL *L,int n,int num){
    63     int i;
    64     if(n>L->length)
    65         return 1;
    66     if(n<1 || n>L->length+1)
    67         return 1;
    68     if(n <= L->length){
    69         for(i=L->length-1;i>=n-1;i--)
    70             L->data[i+1] = L->data[i];
    71     }
    72     L->data[n-1]=num;
    73     L->length++;
    74     return 0;
    75 }
    76 int deleteElem(SL *L,int n){
    77     int i;
    78     if(n>L->length)
    79         return 1;
    80     if(n<1 || n>L->length+1)
    81         return 1;
    82     if(n <= L->length){
    83         for(i=n-1;i<L->length;i++)
    84             L->data[i] = L->data[i+1];
    85     }
    86     L->length--;
    87     return 0;
    88 }

    运行结果

  • 相关阅读:
    为什么C++(感谢waterwalk翻译)
    容器操作笔记
    如此理解面向对象编程
    C++初学者小细节(不定时更新)
    Sales_item 专题
    10步让你成为更优秀的程序员
    C++ PRIMER 笔记
    C++ 异常处理
    透明度 rgba 和 opacity 的区别
    盒模型
  • 原文地址:https://www.cnblogs.com/xing901022/p/3533319.html
Copyright © 2020-2023  润新知