顺序表的插入

 

复制代码
#include <stdio.h>
#include <stdlib.h>

#define ERROR 0
#define OK 1

typedef struct Vector {
    int size, length;
    int *data;
} Vector;

void init(Vector *vector, int size) {
    vector->size = size;
    vector->length = 0;
    vector->data = (int *)malloc(sizeof(int) * size);
}

int insert(Vector *vector, int loc, int value) {
    //如果传入的参数loc 比 0小,或者比len大,那么直接返回ERROR
    if(loc<0||loc>vector->length){
      return ERROR;
    }
    //如果已经到上限,也就是说 顺序表中元素数量vector->length大于等于顺序表的容量 vector->size 直接返回ERROR
    if(vector->length>=vector->size){
      return ERROR;
    }
  //每次向指定位置loc插入一个元素之前,都要将loc之后的所有元素顺次向后移动,从而给新的元素腾出一个空间
    for(int i=vector->length;i>loc;--i){
       vector->data[i] = vector->data[i-1];
    }
     //将插入的元素值value赋给vector->data[loc]
    vector->data[loc]=value;
    //将顺序表中元素个数加1
    vector->length++;
    return OK;
}

void clear(Vector *vector) {
    free(vector->data);
    free(vector);
}

int main() {
    Vector *a = (Vector *)malloc(sizeof(Vector));
    init(a, 100);
    printf("%d\n", insert(a, 1, 0));
    printf("%d\n", insert(a, 0, 1));
    printf("%d\n", insert(a, 2, 1));
    printf("%d\n", insert(a, 1, 2));
    printf("%d\n", insert(a, 0, 3));
    clear(a);
    return 0;
}
复制代码

 

posted @   qingjiawen  阅读(89)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示