首页 > 技术文章 > 顺序表的插入

qingjiawen 2021-11-09 22:33 原文

 

#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;
}

 

推荐阅读