zoukankan      html  css  js  c++  java
  • 链表之顺序存储

    顺序存储优点:

    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 }

    运行结果

  • 相关阅读:
    Linux效劳器装机安全快速进阶指南(6)
    VLC 0.8.6b
    Mesk:简洁而朴实的音乐播放器
    OpenOffice.org最先支持微软docx等技俩
    Rawstudio-轻松转换 RAW 图片
    Transmission 0.70
    Openoffice3.0: 微软Office的解散者?
    AcetoneISO:Linux 下的“Daemon Tools”
    OpenOffice3将支撑PDF编纂及ac琐屑
    Linux的主动实行措施cron和crontab(1)
  • 原文地址:https://www.cnblogs.com/xing901022/p/3533319.html
Copyright © 2011-2022 走看看