• 数据结构(c语言版) 顺序表


    代码

    #include 
    #include 
    
    typedef int E;     //这里我们的元素类型就用int为例吧,先起个别名
    
    //定义结构体
    struct List{
        E * array;
        int capacity;   //数组的容量
        int size;
    };
    
    //给结构体指针起别名
    typedef struct List * ArrayList;    //因为是数组实现,所以就叫ArrayList,这里直接将List的指针起别名
    
    //初始化
    _Bool initList(ArrayList list){
        list->array = malloc(sizeof (E) * list->capacity);    //使用malloc函数申请10个int大小的内存空间,作为底层数组使用
        if(list->array == NULL) return 0;  //需要判断如果申请的结果为NULL的话表示内存空间申请失败
        list->capacity = 10;             //直接将数组的容量设定为10即可
        list->size=0;
        return 1;
    }
    
    //插入数据操作
    _Bool insertList(ArrayList list, E element, int index){
        if(index < 1 || index > list->size + 1) return 0;                                    //判断插入位置,转换成位序,也就是[1, size + 1]这个闭区间
    
        if(list->size == list->capacity) {                                                   //如果size已经到达最大的容量了,肯定是插不进了,那么此时就需要扩容了
            int newCapacity = list->capacity + (list->capacity >> 1);                        //我们先计算一下新的容量大小,这里我取1.5倍原长度,当然你们也可以想扩多少扩多少
            E * newArray = realloc(list->array, newCapacity * sizeof(E));           //这里我们使用新的函数realloc重新申请更大的内存空间
            if(newArray == NULL) return 0;                                                   //如果申请失败,那么就确实没办法插入了,只能返回0表示插入失败了
            list->array = newArray;
            list->capacity = newCapacity;
        }
    
        for (int i = list->size; i > index - 1; --i)
            list->array[i] = list->array[i - 1];
        list->array[index - 1] = element;
        list->size++;
        return 1;
    }
    
    //打印数据
    void printList(ArrayList list){   //编写一个函数用于打印表当前的数据
        for (int i = 0; i < list->size; ++i)   //表里面每个元素都拿出来打印一次
            printf("%d ", list->array[i]);
        printf("\n");
    }
    
    //删除操作
    _Bool deleteList(ArrayList list, int index){
        if(index < 1 || index > list->size) return 0;
        for (int i = index - 1; i < list->size - 1; ++i)
            list->array[i] = list->array[i + 1];   //实际上只需要依次把后面的元素覆盖到前一个即可
        list->size--;   //最后别忘了size - 1
        return 1;
    }
    
    //获取size的大小
    int sizeList(ArrayList list){
        return list->size;
    }
    
    //按位置获取元素
    E * getList(ArrayList list, int index){
        if(index < 1 || index > list->size) return NULL;
        return &list->array[index - 1];
    }
    
    int findList(ArrayList list, E element){
        for (int i = 0; i < list->size; ++i) {   //一直遍历,如果找到那就返回位序
            if(list->array[i] == element) return i + 1;
        }
        return -1;  //如果遍历完了都没找到,那么就返回-1
    }
    
    int main(){
        struct List list;   //创建新的结构体变量
        if(initList(&list)){   //对其进行初始化,如果失败就直接结束
            for (int i =0; i<30; i++){
                insertList(&list, i*10, i+1);
            }
            deleteList(&list, 10);
            deleteList(&list, 10);
            printList(&list);
            printf("获取数组容量:%d\n", list.capacity);      //获取数组容量
    
            printf("按位置获取元素:%d\n", *getList(&list, 3));      //按位置获取元素
            printf("按值查找元素位置:%d\n", findList(&list, 30));  //按值查找元素位置
        } else{
            printf("顺序表初始化失败,无法启动程序!");
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95

    运行效果

    在这里插入图片描述

  • 相关阅读:
    latex
    4-python算法常用模块
    Python|(解决)苹果mac电脑无法打开“chromedriver”,因为无法验证开发者,要怎么解决?
    【Python Numpy】Ndarray属性
    cnn训练自己数据集
    AXI非常用信号说明
    【Matplotlib绘制图像大全】(二十七):Matplotlib将数组array保存为图像
    自然语言处理(NLP)是什么?
    关于Safari浏览器报错:Failed to load resource: 发生SSL错误,无法建立到该服务器的安全连接
    请写出一个高效的在m*n矩阵中判断目标值是否存在的算法
  • 原文地址:https://blog.csdn.net/MateSnake/article/details/134241947