zoukankan      html  css  js  c++  java
  • 02 顺序表基本操作

    顺序表基本操作实现

      1 #include<stdio.h>
      2 #define Capacity 5
      3 
      4 //自定义顺序表
      5 struct List{
      6     int* ElemSet;//声明了一个名为ElemSet的长度不确定的数组,也叫“动态数组”
      7     int len; //顺序表的长度
      8     int capacity; //顺序表的容量
      9 }list;
     10 
     11 //顺序表的初始化,即初步建立一个顺序表
     12 //1,给ElemSet动态数组申请足够大小的物理空间
     13 //2,给len和capacity赋初值
     14 void initList() {
     15     list.len = 0; //空表的长度初始化为0
     16     list.capacity = 5; //空表的初始存储空间为10个int
     17     list.ElemSet = (int*)malloc(Capacity * sizeof(int)); //构造一个空的顺序表,动态申请存储空间
     18     if (!list.ElemSet) {
     19         printf("初始化失败
    ");
     20         return;
     21     }
     22     else {
     23         printf("成功创建动态数组
    ");
     24         //给表中初始化5个数据
     25         for (int i = 0;i < 5;i++) {
     26             list.ElemSet[i] = i;
     27             list.len++;
     28         }
     29     }
     30 }
     31 
     32 //打印顺序表中的全部元素
     33 void showList() {
     34     //printf("表中数据是:
    ");
     35     for (int i = 0;i < list.len;i++) {
     36         printf("%d  ", list.ElemSet[i]);
     37     }
     38     printf("
    ");
     39     
     40 }
     41 
     42 //给空表添加元素
     43 void addElem(int e) {
     44     list.len += 1;
     45         list.ElemSet[list.len - 1] = e;
     46         printf("添加元素后得到的表是:
    ");
     47         showList();
     48 }
     49 
     50 //在空表中插入元素
     51 void insertElem(int e, int insertIndex) {
     52     list.len++;
     53     /*for (int i = insertIndex;i <= list.len;i++) {
     54         list.ElemSet[i + 1] = list.ElemSet[i];
     55         showList();
     56     }
     57     list.ElemSet[insertIndex] = e;*/
     58     for (int i = list.len-1;i >=insertIndex;i--) {
     59         list.ElemSet[i+1] = list.ElemSet[i];
     60         //showList();
     61     }
     62     list.ElemSet[insertIndex] = e;
     63     printf("插入元素后得到的表是:
    ");
     64     showList();
     65 }
     66 
     67 //顺序表删除元素
     68 void deleElem(int delIndex) {
     69     list.len--;
     70     for (int i = delIndex;i < list.len;i++) {
     71         list.ElemSet[i] = list.ElemSet[i+1];
     72     }
     73     printf("删除元素后得到的表是:
    ");
     74     showList();
     75 }
     76 
     77 //顺序表查找元素
     78 int  searchElem(int e) {
     79     for (int i = 0;i < list.len;i++) {
     80         if (list.ElemSet[i] == e) {
     81             return i;
     82         }
     83     }
     84 }
     85 
     86 //寻找特定元素的前驱
     87 int preElem(int e) {
     88     int e_index = searchElem(e);
     89     return list.ElemSet[e_index - 1];
     90 }
     91 
     92 //寻找特定元素的后继
     93 int nextElem(int e) {
     94     int e_index = searchElem(e);
     95     return list.ElemSet[e_index + 1];
     96 }
     97 
     98 
     99 //顺序表更改元素
    100 void changeElem(int e1, int e2) {  //用e2更改1
    101     int e1_index = searchElem(e1);
    102     list.ElemSet[e1_index] = e2;
    103     printf("更改后得到的表是:
    ");
    104     showList();
    105 }
    106 
    107 //将表重置为空表
    108 void clearList() {
    109     for (int i = 0;i < list.capacity;i++) {
    110         list.ElemSet[i] = 0;
    111     }
    112     printf("表已经置空
    ");
    113     showList();
    114 }
    115 
    116 //销毁表
    117 void  destroyList() {
    118     list.len = 0;
    119     printf("表已经销毁
    ");
    120     showList();
    121 }
    122 
    123 
    124 void main() {
    125     int add_e = 0;
    126     initList();
    127     showList();
    128     printf("请输入你要添加的元素:");
    129     scanf("%d", &add_e);
    130     addElem(add_e);
    131     insertElem(88, 2);
    132     deleElem(0);
    133     printf("查找元素3的索引:%d
    ", searchElem(3));
    134     printf("元素3的前驱是:%d
    ", preElem(3));
    135     printf("元素3的后继是:%d
    ", nextElem(3));
    136     changeElem(1, 11);
    137     clearList();
    138     destroyList();
    139 }

     添加操作升级:

    ①数据改为用户输入

    ②添加限制

    #include<stdio.h>
    #define Capacity 5
    
    //自定义顺序表
    struct List{
        int* ElemSet;//声明了一个名为ElemSet的长度不确定的数组,也叫“动态数组”
        int len; //顺序表的长度
        int capacity; //顺序表的容量
    }list;
    
    //顺序表的初始化,即初步建立一个顺序表
    //1,给ElemSet动态数组申请足够大小的物理空间
    //2,给len和capacity赋初值
    void initList() {
        list.len = 0; //空表的长度初始化为0
        list.capacity = 5; //空表的初始存储空间为10个int
        list.ElemSet = (int*)malloc(Capacity * sizeof(int)); //构造一个空的顺序表,动态申请存储空间
        if (!list.ElemSet) {
            printf("初始化失败
    ");
            return;
        }
        else {
            printf("成功创建动态数组
    ");
            //给表中初始化5个数据
            for (int i = 0;i < 5;i++) {
                list.ElemSet[i] = i;
                list.len++;
            }
        }
    }
    
    //打印顺序表中的全部元素
    void showList() {
        //printf("表中数据是:
    ");
        for (int i = 0;i < list.len;i++) {
            printf("%d  ", list.ElemSet[i]);
        }
        printf("
    ");
        
    }
    
    //给空表添加元素
    void addElem(int e) {
        if (list.len == list.capacity) {
            printf("sorry,没有空间可以添加元素了,正在重新开辟
    ");
            list.ElemSet = (int*)realloc(list.ElemSet, (Capacity + 1) * sizeof(int));
            list.capacity++;
            if (!list.ElemSet) {
                printf("重新开辟内存空间失败
    ");
            }
            else {
                addElem( e);
            }
        }
        else {
            list.len += 1;
            list.ElemSet[list.len - 1] = e;
            printf("添加元素后得到的表是:
    ");
            showList();
        }
    }
    
    //在空表中插入元素
    void insertElem(int e, int insertIndex) {
        list.len++;
        /*for (int i = insertIndex;i <= list.len;i++) {
            list.ElemSet[i + 1] = list.ElemSet[i];
            showList();
        }
        list.ElemSet[insertIndex] = e;*/
        for (int i = list.len-1;i >=insertIndex;i--) {
            list.ElemSet[i+1] = list.ElemSet[i];
            //showList();
        }
        list.ElemSet[insertIndex] = e;
        printf("插入元素后得到的表是:
    ");
        showList();
    }
    
    //顺序表删除元素
    void deleElem(int delIndex) {
        list.len--;
        for (int i = delIndex;i < list.len;i++) {
            list.ElemSet[i] = list.ElemSet[i+1];
        }
        printf("删除元素后得到的表是:
    ");
        showList();
    }
    
    //顺序表查找元素
    int  searchElem(int e) {
        for (int i = 0;i < list.len;i++) {
            if (list.ElemSet[i] == e) {
                return i;
            }
        }
    }
    
    //寻找特定元素的前驱
    int preElem(int e) {
        int e_index = searchElem(e);
        return list.ElemSet[e_index - 1];
    }
    
    //寻找特定元素的后继
    int nextElem(int e) {
        int e_index = searchElem(e);
        return list.ElemSet[e_index + 1];
    }
    
    
    //顺序表更改元素
    void changeElem(int e1, int e2) {  //用e2更改1
        int e1_index = searchElem(e1);
        list.ElemSet[e1_index] = e2;
        printf("更改后得到的表是:
    ");
        showList();
    }
    
    //将表重置为空表
    void clearList() {
        for (int i = 0;i < list.capacity;i++) {
            list.ElemSet[i] = 0;
        }
        printf("表已经置空
    ");
        showList();
    }
    
    //销毁表
    void  destroyList() {
        list.len = 0;
        printf("表已经销毁
    ");
        showList();
    }
    
    
    void main() {
        int add_e = 0;
        initList();
        showList();
        printf("请输入你要添加的元素:");
        scanf("%d", &add_e);
        addElem(add_e);
        /*insertElem(88, 2);
        deleElem(0);
        printf("查找元素3的索引:%d
    ", searchElem(3));
        printf("元素3的前驱是:%d
    ", preElem(3));
        printf("元素3的后继是:%d
    ", nextElem(3));
        changeElem(1, 11);
        clearList();
        destroyList();*/
    }

     插入操作升级

    ①插入元素变成用户输入

    ②插入位置的判断

    ③空间不够的处理

      1 #include<stdio.h>
      2 #define Capacity 6
      3 
      4 //自定义顺序表
      5 struct List{
      6     int* ElemSet;//声明了一个名为ElemSet的长度不确定的数组,也叫“动态数组”
      7     int len; //顺序表的长度
      8     int capacity; //顺序表的容量
      9 }list;
     10 
     11 //顺序表的初始化,即初步建立一个顺序表
     12 //1,给ElemSet动态数组申请足够大小的物理空间
     13 //2,给len和capacity赋初值
     14 void initList() {
     15     list.len = 0; //空表的长度初始化为0
     16     list.capacity = 5; //空表的初始存储空间为10个int
     17     list.ElemSet = (int*)malloc(Capacity * sizeof(int)); //构造一个空的顺序表,动态申请存储空间
     18     if (!list.ElemSet) {
     19         printf("初始化失败
    ");
     20         return;
     21     }
     22     else {
     23         printf("成功创建动态数组
    ");
     24         //给表中初始化5个数据
     25         for (int i = 0;i < 5;i++) {
     26             list.ElemSet[i] = i;
     27             list.len++;
     28         }
     29     }
     30 }
     31 
     32 //打印顺序表中的全部元素
     33 void showList() {
     34     //printf("表中数据是:
    ");
     35     for (int i = 0;i < list.len;i++) {
     36         printf("%d  ", list.ElemSet[i]);
     37     }
     38     printf("
    ");
     39     
     40 }
     41 
     42 
     43 
     44 //给空表添加元素
     45 void addElem(int e) {
     46     if (list.len == list.capacity) {
     47         printf("sorry,没有空间可以添加元素了,正在重新开辟
    ");
     48         list.ElemSet = (int*)realloc(list.ElemSet, (Capacity + 1) * sizeof(int));
     49         list.capacity++;
     50         if (!list.ElemSet) {
     51             printf("重新开辟内存空间失败
    ");
     52         }
     53     }
     54     list.len += 1;
     55     list.ElemSet[list.len - 1] = e;
     56     printf("添加元素后得到的表是:
    ");
     57     showList();
     58     printf("表的长度是:%d
    ", list.len);
     59 }
     60 
     61 
     62 //在空表中插入元素
     63 void insertElem(int e, int insertIndex) {
     64     /*for (int i = insertIndex;i <= list.len;i++) {
     65         list.ElemSet[i + 1] = list.ElemSet[i];
     66         showList();
     67     }
     68     list.ElemSet[insertIndex] = e;*/
     69     if (insertIndex < 0 || insertIndex >= list.len) {
     70         printf("插入位置错误
    ");
     71         return;
     72     }
     73     else if(list.len==list.capacity){
     74         printf("sorry,没有空间可以插入元素了,正在重新开辟空间
    ");
     75         list.ElemSet = (int*)realloc(list.ElemSet,(Capacity + 1) * sizeof(int));
     76         if (!list.ElemSet) {
     77             printf("重新开辟空间失败
    ");
     78         }
     79 
     80     }
     81     list.len++;
     82     for (int i = list.len-1;i >=insertIndex;i--) {
     83         list.ElemSet[i+1] = list.ElemSet[i];
     84         //showList();
     85     }
     86     list.ElemSet[insertIndex] = e;
     87     printf("插入元素后得到的表是:
    ");
     88     showList();
     89     printf("表的长度是:%d", list.len);
     90 }
     91 
     92 //顺序表删除元素
     93 void deleElem(int delIndex) {
     94     list.len--;
     95     for (int i = delIndex;i < list.len;i++) {
     96         list.ElemSet[i] = list.ElemSet[i+1];
     97     }
     98     printf("删除元素后得到的表是:
    ");
     99     showList();
    100 }
    101 
    102 //顺序表查找元素
    103 int  searchElem(int e) {
    104     for (int i = 0;i < list.len;i++) {
    105         if (list.ElemSet[i] == e) {
    106             return i;
    107         }
    108     }
    109 }
    110 
    111 //寻找特定元素的前驱
    112 int preElem(int e) {
    113     int e_index = searchElem(e);
    114     return list.ElemSet[e_index - 1];
    115 }
    116 
    117 //寻找特定元素的后继
    118 int nextElem(int e) {
    119     int e_index = searchElem(e);
    120     return list.ElemSet[e_index + 1];
    121 }
    122 
    123 
    124 //顺序表更改元素
    125 void changeElem(int e1, int e2) {  //用e2更改1
    126     int e1_index = searchElem(e1);
    127     list.ElemSet[e1_index] = e2;
    128     printf("更改后得到的表是:
    ");
    129     showList();
    130 }
    131 
    132 //将表重置为空表
    133 void clearList() {
    134     for (int i = 0;i < list.capacity;i++) {
    135         list.ElemSet[i] = 0;
    136     }
    137     printf("表已经置空
    ");
    138     showList();
    139 }
    140 
    141 //销毁表
    142 void  destroyList() {
    143     list.len = 0;
    144     printf("表已经销毁
    ");
    145     showList();
    146 }
    147 
    148 
    149 void main() {
    150     int add_e = 0;
    151     int insert_e = 0;
    152     int insert_index = 0;
    153     initList();
    154     showList();
    155     /*printf("请输入你要添加的元素:");
    156     scanf("%d", &add_e);
    157     addElem(add_e);*/
    158 
    159     printf("请输入你要插入的元素:");
    160     scanf("%d", &insert_e);
    161     printf("请输入你要插入位置的索引:");
    162     scanf("%d", &insert_index);
    163     insertElem(insert_e,insert_index);
    164     /*deleElem(0);
    165     printf("查找元素3的索引:%d
    ", searchElem(3));
    166     printf("元素3的前驱是:%d
    ", preElem(3));
    167     printf("元素3的后继是:%d
    ", nextElem(3));
    168     changeElem(1, 11);
    169     clearList();
    170     destroyList();*/
    171 }

     删除操作升级:

    ①删除元素改为用户输入

    ②删除元素判断(根据索引判断是否存在)

      1 #include<stdio.h>
      2 #define Capacity 6
      3 
      4 //自定义顺序表
      5 struct List{
      6     int* ElemSet;//声明了一个名为ElemSet的长度不确定的数组,也叫“动态数组”
      7     int len; //顺序表的长度
      8     int capacity; //顺序表的容量
      9 }list;
     10 
     11 //顺序表的初始化,即初步建立一个顺序表
     12 //1,给ElemSet动态数组申请足够大小的物理空间
     13 //2,给len和capacity赋初值
     14 void initList() {
     15     list.len = 0; //空表的长度初始化为0
     16     list.capacity = 5; //空表的初始存储空间为10个int
     17     list.ElemSet = (int*)malloc(Capacity * sizeof(int)); //构造一个空的顺序表,动态申请存储空间
     18     if (!list.ElemSet) {
     19         printf("初始化失败
    ");
     20         return;
     21     }
     22     else {
     23         printf("成功创建动态数组
    ");
     24         //给表中初始化5个数据
     25         for (int i = 0;i < 5;i++) {
     26             list.ElemSet[i] = i;
     27             list.len++;
     28         }
     29     }
     30 }
     31 
     32 //打印顺序表中的全部元素
     33 void showList() {
     34     //printf("表中数据是:
    ");
     35     for (int i = 0;i < list.len;i++) {
     36         printf("%d  ", list.ElemSet[i]);
     37     }
     38     printf("
    ");
     39     
     40 }
     41 
     42 
     43 
     44 //给空表添加元素
     45 void addElem(int e) {
     46     if (list.len == list.capacity) {
     47         printf("sorry,没有空间可以添加元素了,正在重新开辟
    ");
     48         list.ElemSet = (int*)realloc(list.ElemSet, (Capacity + 1) * sizeof(int));
     49         list.capacity++;
     50         if (!list.ElemSet) {
     51             printf("重新开辟内存空间失败
    ");
     52         }
     53     }
     54     list.len += 1;
     55     list.ElemSet[list.len - 1] = e;
     56     printf("添加元素后得到的表是:
    ");
     57     showList();
     58     printf("表的长度是:%d
    ", list.len);
     59 }
     60 
     61 
     62 //在空表中插入元素
     63 void insertElem(int e, int insertIndex) {
     64     /*for (int i = insertIndex;i <= list.len;i++) {
     65         list.ElemSet[i + 1] = list.ElemSet[i];
     66         showList();
     67     }
     68     list.ElemSet[insertIndex] = e;*/
     69     if (insertIndex < 0 || insertIndex >= list.len) {
     70         printf("插入位置错误
    ");
     71         return;
     72     }
     73     else if(list.len==list.capacity){
     74         printf("sorry,没有空间可以插入元素了,正在重新开辟空间
    ");
     75         list.ElemSet = (int*)realloc(list.ElemSet,(Capacity + 1) * sizeof(int));
     76         if (!list.ElemSet) {
     77             printf("重新开辟空间失败
    ");
     78         }
     79 
     80     }
     81     list.len++;
     82     for (int i = list.len-1;i >=insertIndex;i--) {
     83         list.ElemSet[i+1] = list.ElemSet[i];
     84         //showList();
     85     }
     86     list.ElemSet[insertIndex] = e;
     87     printf("插入元素后得到的表是:
    ");
     88     showList();
     89     printf("表的长度是:%d", list.len);
     90 }
     91 
     92 //顺序表删除元素
     93 void deleElem(int e) {
     94     int e_index = searchElem(e);
     95     if (e_index < 0 || e_index >= list.len) {
     96         printf("没有这个元素
    ");
     97         return;
     98     }
     99     list.len--;
    100     for (int i = e_index;i < list.len;i++) {
    101         list.ElemSet[i] = list.ElemSet[i+1];
    102     }
    103     printf("删除元素后得到的表是:
    ");
    104     showList();
    105     printf("表的长度是:%d
    ", list.len);
    106 }
    107 
    108 //顺序表查找元素
    109 int  searchElem(int e) {
    110     for (int i = 0;i < list.len;i++) {
    111         if (list.ElemSet[i] == e) {
    112             return i;
    113         }
    114     }
    115 }
    116 
    117 //寻找特定元素的前驱
    118 int preElem(int e) {
    119     int e_index = searchElem(e);
    120     return list.ElemSet[e_index - 1];
    121 }
    122 
    123 //寻找特定元素的后继
    124 int nextElem(int e) {
    125     int e_index = searchElem(e);
    126     return list.ElemSet[e_index + 1];
    127 }
    128 
    129 
    130 //顺序表更改元素
    131 void changeElem(int e1, int e2) {  //用e2更改1
    132     int e1_index = searchElem(e1);
    133     list.ElemSet[e1_index] = e2;
    134     printf("更改后得到的表是:
    ");
    135     showList();
    136 }
    137 
    138 //将表重置为空表
    139 void clearList() {
    140     for (int i = 0;i < list.capacity;i++) {
    141         list.ElemSet[i] = 0;
    142     }
    143     printf("表已经置空
    ");
    144     showList();
    145 }
    146 
    147 //销毁表
    148 void  destroyList() {
    149     list.len = 0;
    150     printf("表已经销毁
    ");
    151     showList();
    152 }
    153 
    154 
    155 void main() {
    156     int add_e = 0;
    157     int insert_e = 0;
    158     int insert_index = 0;
    159     int del_e = 0;
    160     initList();
    161     showList();
    162     /*printf("请输入你要添加的元素:");
    163     scanf("%d", &add_e);
    164     addElem(add_e);*/
    165 
    166     /*printf("请输入你要插入的元素:");
    167     scanf("%d", &insert_e);
    168     printf("请输入你要插入位置的索引:");
    169     scanf("%d", &insert_index);
    170     insertElem(insert_e,insert_index);*/
    171 
    172     printf("请输入要删除元素:");
    173     scanf("%d", &del_e);
    174     deleElem(del_e);
    175 
    176     /*printf("查找元素3的索引:%d
    ", searchElem(3));
    177     printf("元素3的前驱是:%d
    ", preElem(3));
    178     printf("元素3的后继是:%d
    ", nextElem(3));
    179     changeElem(1, 11);
    180     clearList();
    181     destroyList();*/
    182 }

     

     查找操作升级

    ①查找元素改为用户输入

    ②查找情况判断(不存在返回 -1)

      1 #include<stdio.h>
      2 #define Capacity 6
      3 
      4 //自定义顺序表
      5 struct List{
      6     int* ElemSet;//声明了一个名为ElemSet的长度不确定的数组,也叫“动态数组”
      7     int len; //顺序表的长度
      8     int capacity; //顺序表的容量
      9 }list;
     10 
     11 //顺序表的初始化,即初步建立一个顺序表
     12 //1,给ElemSet动态数组申请足够大小的物理空间
     13 //2,给len和capacity赋初值
     14 void initList() {
     15     list.len = 0; //空表的长度初始化为0
     16     list.capacity = 5; //空表的初始存储空间为10个int
     17     list.ElemSet = (int*)malloc(Capacity * sizeof(int)); //构造一个空的顺序表,动态申请存储空间
     18     if (!list.ElemSet) {
     19         printf("初始化失败
    ");
     20         return;
     21     }
     22     else {
     23         printf("成功创建动态数组
    ");
     24         //给表中初始化5个数据
     25         for (int i = 0;i < 5;i++) {
     26             list.ElemSet[i] = i;
     27             list.len++;
     28         }
     29     }
     30 }
     31 
     32 //打印顺序表中的全部元素
     33 void showList() {
     34     //printf("表中数据是:
    ");
     35     for (int i = 0;i < list.len;i++) {
     36         printf("%d  ", list.ElemSet[i]);
     37     }
     38     printf("
    ");
     39     
     40 }
     41 
     42 
     43 
     44 //给空表添加元素
     45 void addElem(int e) {
     46     if (list.len == list.capacity) {
     47         printf("sorry,没有空间可以添加元素了,正在重新开辟
    ");
     48         list.ElemSet = (int*)realloc(list.ElemSet, (Capacity + 1) * sizeof(int));
     49         list.capacity++;
     50         if (!list.ElemSet) {
     51             printf("重新开辟内存空间失败
    ");
     52         }
     53     }
     54     list.len += 1;
     55     list.ElemSet[list.len - 1] = e;
     56     printf("添加元素后得到的表是:
    ");
     57     showList();
     58     printf("表的长度是:%d
    ", list.len);
     59 }
     60 
     61 
     62 //在空表中插入元素
     63 void insertElem(int e, int insertIndex) {
     64     /*for (int i = insertIndex;i <= list.len;i++) {
     65         list.ElemSet[i + 1] = list.ElemSet[i];
     66         showList();
     67     }
     68     list.ElemSet[insertIndex] = e;*/
     69     if (insertIndex < 0 || insertIndex >= list.len) {
     70         printf("插入位置错误
    ");
     71         return;
     72     }
     73     else if(list.len==list.capacity){
     74         printf("sorry,没有空间可以插入元素了,正在重新开辟空间
    ");
     75         list.ElemSet = (int*)realloc(list.ElemSet,(Capacity + 1) * sizeof(int));
     76         if (!list.ElemSet) {
     77             printf("重新开辟空间失败
    ");
     78         }
     79 
     80     }
     81     list.len++;
     82     for (int i = list.len-1;i >=insertIndex;i--) {
     83         list.ElemSet[i+1] = list.ElemSet[i];
     84         //showList();
     85     }
     86     list.ElemSet[insertIndex] = e;
     87     printf("插入元素后得到的表是:
    ");
     88     showList();
     89     printf("表的长度是:%d", list.len);
     90 }
     91 
     92 //顺序表删除元素
     93 void deleElem(int e) {
     94     int e_index = searchElem(e);
     95     if (e_index < 0 || e_index >= list.len) {
     96         printf("没有这个元素
    ");
     97         return;
     98     }
     99     list.len--;
    100     for (int i = e_index;i < list.len;i++) {
    101         list.ElemSet[i] = list.ElemSet[i+1];
    102     }
    103     printf("删除元素后得到的表是:
    ");
    104     showList();
    105     printf("表的长度是:%d
    ", list.len);
    106 }
    107 
    108 //顺序表查找元素
    109 int  searchElem(int e) {
    110     for (int i = 0;i < list.len;i++) {
    111         if (list.ElemSet[i] == e) {
    112             return i;
    113         }
    114     }
    115     return -1;
    116 }
    117 
    118 //寻找特定元素的前驱
    119 int preElem(int e) {
    120     int e_index = searchElem(e);
    121     return list.ElemSet[e_index - 1];
    122 }
    123 
    124 //寻找特定元素的后继
    125 int nextElem(int e) {
    126     int e_index = searchElem(e);
    127     return list.ElemSet[e_index + 1];
    128 }
    129 
    130 
    131 //顺序表更改元素
    132 void changeElem(int e1, int e2) {  //用e2更改1
    133     int e1_index = searchElem(e1);
    134     list.ElemSet[e1_index] = e2;
    135     printf("更改后得到的表是:
    ");
    136     showList();
    137 }
    138 
    139 //将表重置为空表
    140 void clearList() {
    141     for (int i = 0;i < list.capacity;i++) {
    142         list.ElemSet[i] = 0;
    143     }
    144     printf("表已经置空
    ");
    145     showList();
    146 }
    147 
    148 //销毁表
    149 void  destroyList() {
    150     list.len = 0;
    151     printf("表已经销毁
    ");
    152     showList();
    153 }
    154 
    155 
    156 void main() {
    157     int add_e = 0;
    158     int insert_e = 0;
    159     int insert_index = 0;
    160     int del_e = 0;
    161     int search_e = 0;
    162     initList();
    163     showList();
    164     /*printf("请输入你要添加的元素:");
    165     scanf("%d", &add_e);
    166     addElem(add_e);*/
    167 
    168     /*printf("请输入你要插入的元素:");
    169     scanf("%d", &insert_e);
    170     printf("请输入你要插入位置的索引:");
    171     scanf("%d", &insert_index);
    172     insertElem(insert_e,insert_index);*/
    173 
    174     /*printf("请输入要删除元素:");
    175     scanf("%d", &del_e);
    176     deleElem(del_e);*/
    177 
    178     printf("请输入要查找的元素:");
    179     scanf("%d", &search_e);
    180     if (searchElem(search_e) == -1) {
    181         printf("没有找到该元素
    ");
    182     }
    183     else {
    184         printf("找到该元素的索引是:%d", searchElem(search_e));
    185     }
    186 
    187     /*printf("元素3的前驱是:%d
    ", preElem(3));
    188     printf("元素3的后继是:%d
    ", nextElem(3));
    189     changeElem(1, 11);
    190     clearList();
    191     destroyList();*/
    192 }

     

    寻找前驱和后继操作的升级

    ①所寻找的元素改为用户输入

    ②前驱和后继存在的判断

      1 #include<stdio.h>
      2 #define Capacity 6
      3 
      4 //自定义顺序表
      5 struct List{
      6     int* ElemSet;//声明了一个名为ElemSet的长度不确定的数组,也叫“动态数组”
      7     int len; //顺序表的长度
      8     int capacity; //顺序表的容量
      9 }list;
     10 
     11 //顺序表的初始化,即初步建立一个顺序表
     12 //1,给ElemSet动态数组申请足够大小的物理空间
     13 //2,给len和capacity赋初值
     14 void initList() {
     15     list.len = 0; //空表的长度初始化为0
     16     list.capacity = 5; //空表的初始存储空间为10个int
     17     list.ElemSet = (int*)malloc(Capacity * sizeof(int)); //构造一个空的顺序表,动态申请存储空间
     18     if (!list.ElemSet) {
     19         printf("初始化失败
    ");
     20         return;
     21     }
     22     else {
     23         printf("成功创建动态数组
    ");
     24         //给表中初始化5个数据
     25         for (int i = 0;i < 5;i++) {
     26             list.ElemSet[i] = i;
     27             list.len++;
     28         }
     29     }
     30 }
     31 
     32 //打印顺序表中的全部元素
     33 void showList() {
     34     //printf("表中数据是:
    ");
     35     for (int i = 0;i < list.len;i++) {
     36         printf("%d  ", list.ElemSet[i]);
     37     }
     38     printf("
    ");
     39     
     40 }
     41 
     42 
     43 
     44 //给空表添加元素
     45 void addElem(int e) {
     46     if (list.len == list.capacity) {
     47         printf("sorry,没有空间可以添加元素了,正在重新开辟
    ");
     48         list.ElemSet = (int*)realloc(list.ElemSet, (Capacity + 1) * sizeof(int));
     49         list.capacity++;
     50         if (!list.ElemSet) {
     51             printf("重新开辟内存空间失败
    ");
     52         }
     53     }
     54     list.len += 1;
     55     list.ElemSet[list.len - 1] = e;
     56     printf("添加元素后得到的表是:
    ");
     57     showList();
     58     printf("表的长度是:%d
    ", list.len);
     59 }
     60 
     61 
     62 //在空表中插入元素
     63 void insertElem(int e, int insertIndex) {
     64     /*for (int i = insertIndex;i <= list.len;i++) {
     65         list.ElemSet[i + 1] = list.ElemSet[i];
     66         showList();
     67     }
     68     list.ElemSet[insertIndex] = e;*/
     69     if (insertIndex < 0 || insertIndex >= list.len) {
     70         printf("插入位置错误
    ");
     71         return;
     72     }
     73     else if(list.len==list.capacity){
     74         printf("sorry,没有空间可以插入元素了,正在重新开辟空间
    ");
     75         list.ElemSet = (int*)realloc(list.ElemSet,(Capacity + 1) * sizeof(int));
     76         if (!list.ElemSet) {
     77             printf("重新开辟空间失败
    ");
     78         }
     79 
     80     }
     81     list.len++;
     82     for (int i = list.len-1;i >=insertIndex;i--) {
     83         list.ElemSet[i+1] = list.ElemSet[i];
     84         //showList();
     85     }
     86     list.ElemSet[insertIndex] = e;
     87     printf("插入元素后得到的表是:
    ");
     88     showList();
     89     printf("表的长度是:%d", list.len);
     90 }
     91 
     92 //顺序表删除元素
     93 void deleElem(int e) {
     94     int e_index = searchElem(e);
     95     if (e_index < 0 || e_index >= list.len) {
     96         printf("没有这个元素
    ");
     97         return;
     98     }
     99     list.len--;
    100     for (int i = e_index;i < list.len;i++) {
    101         list.ElemSet[i] = list.ElemSet[i+1];
    102     }
    103     printf("删除元素后得到的表是:
    ");
    104     showList();
    105     printf("表的长度是:%d
    ", list.len);
    106 }
    107 
    108 //顺序表查找元素
    109 int  searchElem(int e) {
    110     for (int i = 0;i < list.len;i++) {
    111         if (list.ElemSet[i] == e) {
    112             return i;
    113         }
    114     }
    115     return -1;
    116 }
    117 
    118 //寻找特定元素的前驱
    119 int preElem(int e) {
    120     if (searchElem(e) == 0) {
    121         return -1;
    122     }
    123     int e_index = searchElem(e);
    124     return list.ElemSet[e_index - 1];
    125 }
    126 
    127 //寻找特定元素的后继
    128 int nextElem(int e) {
    129     if (searchElem(e) == list.len-1) {
    130         return -1;
    131     }
    132     int e_index = searchElem(e);
    133     return list.ElemSet[e_index + 1];
    134 }
    135 
    136 
    137 //顺序表更改元素
    138 void changeElem(int e1, int e2) {  //用e2更改1
    139     int e1_index = searchElem(e1);
    140     list.ElemSet[e1_index] = e2;
    141     printf("更改后得到的表是:
    ");
    142     showList();
    143 }
    144 
    145 //将表重置为空表
    146 void clearList() {
    147     for (int i = 0;i < list.capacity;i++) {
    148         list.ElemSet[i] = 0;
    149     }
    150     printf("表已经置空
    ");
    151     showList();
    152 }
    153 
    154 //销毁表
    155 void  destroyList() {
    156     list.len = 0;
    157     printf("表已经销毁
    ");
    158     showList();
    159 }
    160 
    161 
    162 void main() {
    163     int add_e = 0;
    164     int insert_e = 0;
    165     int insert_index = 0;
    166     int del_e = 0;
    167     int search_e = 0;
    168     initList();
    169     showList();
    170     /*printf("请输入你要添加的元素:");
    171     scanf("%d", &add_e);
    172     addElem(add_e);*/
    173 
    174     /*printf("请输入你要插入的元素:");
    175     scanf("%d", &insert_e);
    176     printf("请输入你要插入位置的索引:");
    177     scanf("%d", &insert_index);
    178     insertElem(insert_e,insert_index);*/
    179 
    180     /*printf("请输入要删除元素:");
    181     scanf("%d", &del_e);
    182     deleElem(del_e);*/
    183 
    184     /*printf("请输入要查找的元素:");
    185     scanf("%d", &search_e);
    186     if (searchElem(search_e) == -1) {
    187         printf("没有找到该元素
    ");
    188     }
    189     else {
    190         printf("找到该元素的索引是:%d", searchElem(search_e));
    191     }*/
    192 
    193     printf("请输入要寻找哪个元素的前驱:");
    194     scanf("%d", &search_e);
    195     if (preElem(search_e) == -1) {
    196         printf("该元素没有前驱
    ");
    197     }
    198     else {
    199         printf("该元素的前驱是:%d
    ", preElem(search_e));
    200     }
    201     printf("请输入要寻找哪个元素的后继:");
    202     scanf("%d", &search_e);
    203     if (nextElem(search_e) == -1) {
    204         printf("该元素没有后继
    ");
    205     }
    206     else {
    207         printf("该元素的后继是:%d
    ", nextElem(search_e));
    208     }
    209     
    210     
    211     /*changeElem(1, 11);
    212     clearList();
    213     destroyList();*/
    214 }

     

     更改元素操作升级

    ①被更改的值和更改后的值改为用户输入

    ②是否存在该元素可被更改判断

      1 #include<stdio.h>
      2 #define Capacity 6
      3 
      4 //自定义顺序表
      5 struct List{
      6     int* ElemSet;//声明了一个名为ElemSet的长度不确定的数组,也叫“动态数组”
      7     int len; //顺序表的长度
      8     int capacity; //顺序表的容量
      9 }list;
     10 
     11 //顺序表的初始化,即初步建立一个顺序表
     12 //1,给ElemSet动态数组申请足够大小的物理空间
     13 //2,给len和capacity赋初值
     14 void initList() {
     15     list.len = 0; //空表的长度初始化为0
     16     list.capacity = 5; //空表的初始存储空间为10个int
     17     list.ElemSet = (int*)malloc(Capacity * sizeof(int)); //构造一个空的顺序表,动态申请存储空间
     18     if (!list.ElemSet) {
     19         printf("初始化失败
    ");
     20         return;
     21     }
     22     else {
     23         printf("成功创建动态数组
    ");
     24         //给表中初始化5个数据
     25         for (int i = 0;i < 5;i++) {
     26             list.ElemSet[i] = i;
     27             list.len++;
     28         }
     29     }
     30 }
     31 
     32 //打印顺序表中的全部元素
     33 void showList() {
     34     //printf("表中数据是:
    ");
     35     for (int i = 0;i < list.len;i++) {
     36         printf("%d  ", list.ElemSet[i]);
     37     }
     38     printf("
    ");
     39     
     40 }
     41 
     42 
     43 
     44 //给空表添加元素
     45 void addElem(int e) {
     46     if (list.len == list.capacity) {
     47         printf("sorry,没有空间可以添加元素了,正在重新开辟
    ");
     48         list.ElemSet = (int*)realloc(list.ElemSet, (Capacity + 1) * sizeof(int));
     49         list.capacity++;
     50         if (!list.ElemSet) {
     51             printf("重新开辟内存空间失败
    ");
     52         }
     53     }
     54     list.len += 1;
     55     list.ElemSet[list.len - 1] = e;
     56     printf("添加元素后得到的表是:
    ");
     57     showList();
     58     printf("表的长度是:%d
    ", list.len);
     59 }
     60 
     61 
     62 //在空表中插入元素
     63 void insertElem(int e, int insertIndex) {
     64     /*for (int i = insertIndex;i <= list.len;i++) {
     65         list.ElemSet[i + 1] = list.ElemSet[i];
     66         showList();
     67     }
     68     list.ElemSet[insertIndex] = e;*/
     69     if (insertIndex < 0 || insertIndex >= list.len) {
     70         printf("插入位置错误
    ");
     71         return;
     72     }
     73     else if(list.len==list.capacity){
     74         printf("sorry,没有空间可以插入元素了,正在重新开辟空间
    ");
     75         list.ElemSet = (int*)realloc(list.ElemSet,(Capacity + 1) * sizeof(int));
     76         if (!list.ElemSet) {
     77             printf("重新开辟空间失败
    ");
     78         }
     79 
     80     }
     81     list.len++;
     82     for (int i = list.len-1;i >=insertIndex;i--) {
     83         list.ElemSet[i+1] = list.ElemSet[i];
     84         //showList();
     85     }
     86     list.ElemSet[insertIndex] = e;
     87     printf("插入元素后得到的表是:
    ");
     88     showList();
     89     printf("表的长度是:%d", list.len);
     90 }
     91 
     92 //顺序表删除元素
     93 void deleElem(int e) {
     94     int e_index = searchElem(e);
     95     if (e_index < 0 || e_index >= list.len) {
     96         printf("没有这个元素
    ");
     97         return;
     98     }
     99     list.len--;
    100     for (int i = e_index;i < list.len;i++) {
    101         list.ElemSet[i] = list.ElemSet[i+1];
    102     }
    103     printf("删除元素后得到的表是:
    ");
    104     showList();
    105     printf("表的长度是:%d
    ", list.len);
    106 }
    107 
    108 //顺序表查找元素
    109 int  searchElem(int e) {
    110     for (int i = 0;i < list.len;i++) {
    111         if (list.ElemSet[i] == e) {
    112             return i;
    113         }
    114     }
    115     return -1;
    116 }
    117 
    118 //寻找特定元素的前驱
    119 int preElem(int e) {
    120     if (searchElem(e) == 0) {
    121         return -1;
    122     }
    123     int e_index = searchElem(e);
    124     return list.ElemSet[e_index - 1];
    125 }
    126 
    127 //寻找特定元素的后继
    128 int nextElem(int e) {
    129     if (searchElem(e) == list.len-1) {
    130         return -1;
    131     }
    132     int e_index = searchElem(e);
    133     return list.ElemSet[e_index + 1];
    134 }
    135 
    136 
    137 //顺序表更改元素
    138 void changeElem(int e1, int e2) {  //用e2更改1
    139     if (searchElem(e1) < 0 || searchElem(e1) >= list.len) {
    140         printf("没有这个元素");
    141         return;
    142     }
    143     int e1_index = searchElem(e1);
    144     list.ElemSet[e1_index] = e2;
    145     printf("更改后得到的表是:
    ");
    146     showList();
    147 }
    148 
    149 //将表重置为空表
    150 void clearList() {
    151     for (int i = 0;i < list.capacity;i++) {
    152         list.ElemSet[i] = 0;
    153     }
    154     printf("表已经置空
    ");
    155     showList();
    156 }
    157 
    158 //销毁表
    159 void  destroyList() {
    160     list.len = 0;
    161     printf("表已经销毁
    ");
    162     showList();
    163 }
    164 
    165 
    166 void main() {
    167     int add_e = 0;
    168     int insert_e = 0;
    169     int insert_index = 0;
    170     int del_e = 0;
    171     int search_e = 0;
    172     int change_e1 = 0,change_e2=0;
    173     initList();
    174     showList();
    175     /*printf("请输入你要添加的元素:");
    176     scanf("%d", &add_e);
    177     addElem(add_e);*/
    178 
    179     /*printf("请输入你要插入的元素:");
    180     scanf("%d", &insert_e);
    181     printf("请输入你要插入位置的索引:");
    182     scanf("%d", &insert_index);
    183     insertElem(insert_e,insert_index);*/
    184 
    185     /*printf("请输入要删除元素:");
    186     scanf("%d", &del_e);
    187     deleElem(del_e);*/
    188 
    189     /*printf("请输入要查找的元素:");
    190     scanf("%d", &search_e);
    191     if (searchElem(search_e) == -1) {
    192         printf("没有找到该元素
    ");
    193     }
    194     else {
    195         printf("找到该元素的索引是:%d", searchElem(search_e));
    196     }*/
    197 
    198     /*printf("请输入要寻找哪个元素的前驱:");
    199     scanf("%d", &search_e);
    200     if (preElem(search_e) == -1) {
    201         printf("该元素没有前驱
    ");
    202     }
    203     else {
    204         printf("该元素的前驱是:%d
    ", preElem(search_e));
    205     }
    206     printf("请输入要寻找哪个元素的后继:");
    207     scanf("%d", &search_e);
    208     if (nextElem(search_e) == -1) {
    209         printf("该元素没有后继
    ");
    210     }
    211     else {
    212         printf("该元素的后继是:%d
    ", nextElem(search_e));
    213     }*/
    214     
    215     printf("请输入要改变的元素:");
    216     scanf("%d", &change_e1);
    217     printf("请输入改变后的值:");
    218     scanf("%d", &change_e2);
    219     changeElem(change_e1, change_e2);
    220     /*clearList();
    221     destroyList();*/
    222 }

     

     置空和销毁操作升级

    ①销毁进一步确定

    ②销毁操作返回类型改为布尔类型(需要自定义布尔类型返回值)

      1 #include<stdio.h>
      2 #define Capacity 6
      3 typedef int bool;
      4 const int true = 1;
      5 const int false = 0;
      6 
      7 
      8 //自定义顺序表
      9 struct List{
     10     int* ElemSet;//声明了一个名为ElemSet的长度不确定的数组,也叫“动态数组”
     11     int len; //顺序表的长度
     12     int capacity; //顺序表的容量
     13 }list;
     14 
     15 //顺序表的初始化,即初步建立一个顺序表
     16 //1,给ElemSet动态数组申请足够大小的物理空间
     17 //2,给len和capacity赋初值
     18 void initList() {
     19     list.len = 0; //空表的长度初始化为0
     20     list.capacity = 5; //空表的初始存储空间为10个int
     21     list.ElemSet = (int*)malloc(Capacity * sizeof(int)); //构造一个空的顺序表,动态申请存储空间
     22     if (!list.ElemSet) {
     23         printf("初始化失败
    ");
     24         return;
     25     }
     26     else {
     27         printf("成功创建动态数组
    ");
     28         //给表中初始化5个数据
     29         for (int i = 0;i < 5;i++) {
     30             list.ElemSet[i] = i;
     31             list.len++;
     32         }
     33     }
     34 }
     35 
     36 //打印顺序表中的全部元素
     37 void showList() {
     38     //printf("表中数据是:
    ");
     39     for (int i = 0;i < list.len;i++) {
     40         printf("%d  ", list.ElemSet[i]);
     41     }
     42     printf("
    ");
     43     
     44 }
     45 
     46 
     47 
     48 //给空表添加元素
     49 void addElem(int e) {
     50     if (list.len == list.capacity) {
     51         printf("sorry,没有空间可以添加元素了,正在重新开辟
    ");
     52         list.ElemSet = (int*)realloc(list.ElemSet, (Capacity + 1) * sizeof(int));
     53         list.capacity++;
     54         if (!list.ElemSet) {
     55             printf("重新开辟内存空间失败
    ");
     56         }
     57     }
     58     list.len += 1;
     59     list.ElemSet[list.len - 1] = e;
     60     printf("添加元素后得到的表是:
    ");
     61     showList();
     62     printf("表的长度是:%d
    ", list.len);
     63 }
     64 
     65 
     66 //在空表中插入元素
     67 void insertElem(int e, int insertIndex) {
     68     /*for (int i = insertIndex;i <= list.len;i++) {
     69         list.ElemSet[i + 1] = list.ElemSet[i];
     70         showList();
     71     }
     72     list.ElemSet[insertIndex] = e;*/
     73     if (insertIndex < 0 || insertIndex >= list.len) {
     74         printf("插入位置错误
    ");
     75         return;
     76     }
     77     else if(list.len==list.capacity){
     78         printf("sorry,没有空间可以插入元素了,正在重新开辟空间
    ");
     79         list.ElemSet = (int*)realloc(list.ElemSet,(Capacity + 1) * sizeof(int));
     80         if (!list.ElemSet) {
     81             printf("重新开辟空间失败
    ");
     82         }
     83 
     84     }
     85     list.len++;
     86     for (int i = list.len-1;i >=insertIndex;i--) {
     87         list.ElemSet[i+1] = list.ElemSet[i];
     88         //showList();
     89     }
     90     list.ElemSet[insertIndex] = e;
     91     printf("插入元素后得到的表是:
    ");
     92     showList();
     93     printf("表的长度是:%d", list.len);
     94 }
     95 
     96 //顺序表删除元素
     97 void deleElem(int e) {
     98     int e_index = searchElem(e);
     99     if (e_index < 0 || e_index >= list.len) {
    100         printf("没有这个元素
    ");
    101         return;
    102     }
    103     list.len--;
    104     for (int i = e_index;i < list.len;i++) {
    105         list.ElemSet[i] = list.ElemSet[i+1];
    106     }
    107     printf("删除元素后得到的表是:
    ");
    108     showList();
    109     printf("表的长度是:%d
    ", list.len);
    110 }
    111 
    112 //顺序表查找元素
    113 int  searchElem(int e) {
    114     for (int i = 0;i < list.len;i++) {
    115         if (list.ElemSet[i] == e) {
    116             return i;
    117         }
    118     }
    119     return -1;
    120 }
    121 
    122 //寻找特定元素的前驱
    123 int preElem(int e) {
    124     if (searchElem(e) == 0) {
    125         return -1;
    126     }
    127     int e_index = searchElem(e);
    128     return list.ElemSet[e_index - 1];
    129 }
    130 
    131 //寻找特定元素的后继
    132 int nextElem(int e) {
    133     if (searchElem(e) == list.len-1) {
    134         return -1;
    135     }
    136     int e_index = searchElem(e);
    137     return list.ElemSet[e_index + 1];
    138 }
    139 
    140 
    141 //顺序表更改元素
    142 void changeElem(int e1, int e2) {  //用e2更改1
    143     if (searchElem(e1) < 0 || searchElem(e1) >= list.len) {
    144         printf("没有这个元素");
    145         return;
    146     }
    147     int e1_index = searchElem(e1);
    148     list.ElemSet[e1_index] = e2;
    149     printf("更改后得到的表是:
    ");
    150     showList();
    151 }
    152 
    153 //将表重置为空表
    154 void clearList() {
    155     if (destroyList()){
    156         printf("置空失败,该表已被销毁
    ");
    157         return;
    158     }
    159     for (int i = 0;i < list.capacity;i++) {
    160         list.ElemSet[i] = 0;
    161     }
    162     printf("表已经置空
    ");
    163     showList();
    164 }
    165 
    166 //销毁表
    167 bool destroyList() {
    168     char isbreak = ' ' ;
    169     printf("是否要销毁表?y/n:");
    170     scanf("%c", &isbreak);
    171     getchar();
    172     if (isbreak == 'y') {
    173         list.len = 0;
    174         printf("表已经销毁
    ");
    175         return true;
    176     }
    177     else {
    178         return false;
    179     }
    180 }
    181 
    182 
    183 void main() {
    184     int add_e = 0;
    185     int insert_e = 0;
    186     int insert_index = 0;
    187     int del_e = 0;
    188     int search_e = 0;
    189     int change_e1 = 0,change_e2=0;
    190     initList();
    191     showList();
    192     /*printf("请输入你要添加的元素:");
    193     scanf("%d", &add_e);
    194     addElem(add_e);*/
    195 
    196     /*printf("请输入你要插入的元素:");
    197     scanf("%d", &insert_e);
    198     printf("请输入你要插入位置的索引:");
    199     scanf("%d", &insert_index);
    200     insertElem(insert_e,insert_index);*/
    201 
    202     /*printf("请输入要删除元素:");
    203     scanf("%d", &del_e);
    204     deleElem(del_e);*/
    205 
    206     /*printf("请输入要查找的元素:");
    207     scanf("%d", &search_e);
    208     if (searchElem(search_e) == -1) {
    209         printf("没有找到该元素
    ");
    210     }
    211     else {
    212         printf("找到该元素的索引是:%d", searchElem(search_e));
    213     }*/
    214 
    215     /*printf("请输入要寻找哪个元素的前驱:");
    216     scanf("%d", &search_e);
    217     if (preElem(search_e) == -1) {
    218         printf("该元素没有前驱
    ");
    219     }
    220     else {
    221         printf("该元素的前驱是:%d
    ", preElem(search_e));
    222     }
    223     printf("请输入要寻找哪个元素的后继:");
    224     scanf("%d", &search_e);
    225     if (nextElem(search_e) == -1) {
    226         printf("该元素没有后继
    ");
    227     }
    228     else {
    229         printf("该元素的后继是:%d
    ", nextElem(search_e));
    230     }*/
    231     
    232     /*printf("请输入要改变的元素:");
    233     scanf("%d", &change_e1);
    234     printf("请输入改变后的值:");
    235     scanf("%d", &change_e2);
    236     changeElem(change_e1, change_e2);*/
    237     
    238     clearList();
    239     /*destroyList();*/
    240 }

     

     完整代码

      1 #include<stdio.h>
      2 #include<stdlib.h>
      3 #define Capacity 6
      4 typedef int bool;
      5 const int true = 1;
      6 const int false = 0;
      7 
      8 
      9 //自定义顺序表
     10 struct List{
     11     int* ElemSet;//声明了一个名为ElemSet的长度不确定的数组,也叫“动态数组”
     12     int len; //顺序表的长度
     13     int capacity; //顺序表的容量
     14 }list;
     15 
     16 //顺序表的初始化,即初步建立一个顺序表
     17 //1,给ElemSet动态数组申请足够大小的物理空间
     18 //2,给len和capacity赋初值
     19 void initList() {
     20     list.len = 0; //空表的长度初始化为0
     21     list.capacity = 5; //空表的初始存储空间为10个int
     22     list.ElemSet = (int*)malloc(Capacity * sizeof(int)); //构造一个空的顺序表,动态申请存储空间
     23     if (!list.ElemSet) {
     24         printf("初始化失败
    ");
     25         return;
     26     }
     27     else {
     28         printf("成功创建动态数组
    ");
     29         //给表中初始化5个数据
     30         for (int i = 0;i < 5;i++) {
     31             list.ElemSet[i] = i;
     32             list.len++;
     33         }
     34     }
     35 }
     36 
     37 //打印顺序表中的全部元素
     38 void showList() {
     39     //printf("表中数据是:
    ");
     40     for (int i = 0;i < list.len;i++) {
     41         printf("%d  ", list.ElemSet[i]);
     42     }
     43     printf("
    ");
     44     
     45 }
     46 
     47 
     48 
     49 //给空表添加元素
     50 void addElem(int e) {
     51     if (list.len == list.capacity) {
     52         printf("sorry,没有空间可以添加元素了,正在重新开辟
    ");
     53         list.ElemSet = (int*)realloc(list.ElemSet, (Capacity + 1) * sizeof(int));
     54         list.capacity++;
     55         if (!list.ElemSet) {
     56             printf("重新开辟内存空间失败
    ");
     57         }
     58     }
     59     list.len += 1;
     60     list.ElemSet[list.len - 1] = e;
     61     printf("添加元素后得到的表是:
    ");
     62     showList();
     63     printf("表的长度是:%d
    ", list.len);
     64 }
     65 
     66 
     67 //在空表中插入元素
     68 void insertElem(int e, int insertIndex) {
     69     /*for (int i = insertIndex;i <= list.len;i++) {
     70         list.ElemSet[i + 1] = list.ElemSet[i];
     71         showList();
     72     }
     73     list.ElemSet[insertIndex] = e;*/
     74     if (insertIndex < 0 || insertIndex >= list.len) {
     75         printf("插入位置错误
    ");
     76         return;
     77     }
     78     else if(list.len==list.capacity){
     79         printf("sorry,没有空间可以插入元素了,正在重新开辟空间
    ");
     80         list.ElemSet = (int*)realloc(list.ElemSet,(Capacity + 1) * sizeof(int));
     81         if (!list.ElemSet) {
     82             printf("重新开辟空间失败
    ");
     83         }
     84 
     85     }
     86     list.len++;
     87     for (int i = list.len-1;i >=insertIndex;i--) {
     88         list.ElemSet[i+1] = list.ElemSet[i];
     89         //showList();
     90     }
     91     list.ElemSet[insertIndex] = e;
     92     printf("插入元素后得到的表是:
    ");
     93     showList();
     94     printf("表的长度是:%d
    ", list.len);
     95 }
     96 
     97 //顺序表删除元素
     98 void deleElem(int e) {
     99     int e_index = searchElem(e);
    100     if (e_index < 0 || e_index >= list.len) {
    101         printf("没有这个元素
    ");
    102         return;
    103     }
    104     list.len--;
    105     for (int i = e_index;i < list.len;i++) {
    106         list.ElemSet[i] = list.ElemSet[i+1];
    107     }
    108     printf("删除元素后得到的表是:
    ");
    109     showList();
    110     printf("表的长度是:%d
    ", list.len);
    111 }
    112 
    113 //顺序表查找元素
    114 int  searchElem(int e) {
    115     for (int i = 0;i < list.len;i++) {
    116         if (list.ElemSet[i] == e) {
    117             return i;
    118         }
    119     }
    120     return -1;
    121 }
    122 
    123 //寻找特定元素的前驱
    124 int preElem(int e) {
    125     if (searchElem(e) == 0) {
    126         return -1;
    127     }
    128     int e_index = searchElem(e);
    129     return list.ElemSet[e_index - 1];
    130 }
    131 
    132 //寻找特定元素的后继
    133 int nextElem(int e) {
    134     if (searchElem(e) == list.len-1) {
    135         return -1;
    136     }
    137     int e_index = searchElem(e);
    138     return list.ElemSet[e_index + 1];
    139 }
    140 
    141 
    142 //顺序表更改元素
    143 void changeElem(int e1, int e2) {  //用e2更改1
    144     if (searchElem(e1) < 0 || searchElem(e1) >= list.len) {
    145         printf("没有这个元素
    ");
    146         return;
    147     }
    148     int e1_index = searchElem(e1);
    149     list.ElemSet[e1_index] = e2;
    150     printf("更改后得到的表是:
    ");
    151     showList();
    152 }
    153 
    154 //将表重置为空表
    155 void clearList() {
    156     if (destroyList()){
    157         printf("置空失败,该表已被销毁
    ");
    158         return;
    159     }
    160     else {
    161         for (int i = 0;i < list.capacity;i++) {
    162             list.ElemSet[i] = 0;
    163         }
    164         printf("表已经置空
    ");
    165         showList();
    166     }
    167 }
    168 
    169 //销毁表
    170 bool destroyList() {
    171     char isbreak = ' ' ;
    172     printf("是否要销毁表?y/n:");
    173     scanf("%c", &isbreak);
    174     getchar();
    175     if(isbreak=='y'){
    176         list.len = 0;
    177         printf("销毁成功
    ");
    178         return true;
    179     }
    180     else {
    181         printf("销毁失败
    ");
    182         return false;
    183     }
    184 }
    185 
    186 
    187 void main() {
    188     int add_e = 0;
    189     int insert_e = 0;
    190     int insert_index = 0;
    191     int del_e = 0;
    192     int search_e = 0;
    193     int change_e1 = 0,change_e2=0;
    194     initList();
    195     showList();
    196     printf("请输入你要添加的元素:");
    197     scanf("%d", &add_e);
    198     addElem(add_e);
    199 
    200     printf("请输入你要插入的元素:");
    201     scanf("%d", &insert_e);
    202     printf("请输入你要插入位置的索引:");
    203     scanf("%d", &insert_index);
    204     insertElem(insert_e,insert_index);
    205 
    206     printf("请输入要删除元素:");
    207     scanf("%d", &del_e);
    208     deleElem(del_e);
    209 
    210     printf("请输入要查找的元素:");
    211     scanf("%d", &search_e);
    212     if (searchElem(search_e) == -1) {
    213         printf("没有找到该元素
    ");
    214     }
    215     else {
    216         printf("找到该元素的索引是:%d
    ", searchElem(search_e));
    217     }
    218 
    219     printf("请输入要寻找哪个元素的前驱:");
    220     scanf("%d", &search_e);
    221     if (preElem(search_e) == -1) {
    222         printf("该元素没有前驱
    ");
    223     }
    224     else {
    225         printf("该元素的前驱是:%d
    ", preElem(search_e));
    226     }
    227     printf("请输入要寻找哪个元素的后继:");
    228     scanf("%d", &search_e);
    229     if (nextElem(search_e) == -1) {
    230         printf("该元素没有后继
    ");
    231     }
    232     else {
    233         printf("该元素的后继是:%d
    ", nextElem(search_e));
    234     }
    235     
    236     printf("请输入要改变的元素:");
    237     scanf("%d", &change_e1);
    238     printf("请输入改变后的值:");
    239     scanf("%d", &change_e2);
    240     changeElem(change_e1, change_e2);
    241     
    242     clearList();
    243     destroyList();
    244 }

  • 相关阅读:
    阿里云CentOS 7无外网IP的ECS访问外网(配置网关服务器)
    CentOS 7配置成网关服务器
    Mac/Ubuntu下的数据建模工具PDMan,替代PowerDesigner
    Docker卸载高版本重装低版本后启动提示:driver not supported
    Redis连接出现Error: Connection reset by peer的问题是由于使用Redis的安全模式
    Mac流量监控/硬盘监控小工具
    CentOS 7创建自定义KVM模板(现有KVM迁移到另外一台机)
    vi显示行号
    阿里云与微软云的对照表
    CentOS下安装Jenkins(Docker/war/tomcat/java -jar)
  • 原文地址:https://www.cnblogs.com/shanlu0000/p/12408874.html
Copyright © 2011-2022 走看看