深度解读数组操作

本篇博客为本人处女作,有不足之处,欢迎大家指出。此博客为原创,若需要转载,请征求本人同意,谢谢。

此次,我们主要讲解数据结构中数组的操作,大家都知道,数组是数据结构中的最基本的结构,对于它的操作,无外乎就增,删,改,查。大家都会使用它,今天我就带领大家一起实现一下数据结构中的对于数组的操作。

首先是初始代码:

#include<stdio.h>


#define ERROR -1

#define OK 0


typedef struct Vector{

  int size; //占用数组多少

  int length; //数组大小

  int *data; //存放数据

}Vector,*pVector;


void init(Vector *vec,  int n = 100){ //初始化数组

  vec->data = (int *)malloc(n * sizeof(int));

  vec->size = 0;

  vec->length = n;

}


int expand(Vector *vec){

    int *temp = vec->data;

    vec ->data = (int *)realloc(vec->data,2 * vec->length * sizeof(int));

    if(vec->data == NULL){ //如果创建失败,避免指向元数组的指针丢失

       vec->data = temp;

       return ERROR;

    }

    vec->length *= 2;

    return OK;

  }


int insert(Vector *vec, int value, int index){ //向数组里面插入一个元素

  if(index < 0 || index > vec->length){

    return ERROR;

  }

  if(vec->length == index){

    expand(vec); //进行扩容

  }

  for(int i = vec->length; i >= index; --i){

     vec->[i + 1] = vec->data[i];

     if( i == index) vec->data[i] = value;

  }

  vec->size++;

  return OK;

}


int delete(Vector *vec, int index){ // 删除index位置的元素

  if(index < 0 || index > vec->length) return ERROR;

  for(int i = index; i < vec->length; ++i){

    vec->data[i - 1] = vec-<data[i]; //数组从0开始,所以要  -1;

  }

 vec->size--;

  return OK;

}


void ouput(Vector *vec){

  printf("Vector:");

  for(int i = 0; i < vec->size; ++i){

    printf("%d\n",vec->data[i]);

  }

  return ;

}


void clear(Vector *vec){ //释放数组

  free(vec->data);

  free(vec);

  return ;

}


int main(){

  pVector vec = (pVector *)malloc(sizeof(Vector));

  int opr; //代表操作,0代表插入,1代表删除

  int index, value, n;

  init(vec);

  while(scanf("%d", &opr) != EOF){

     switch(opr){

       case 0:

          printf("插入的值和位置:");

          scanf("%d%d",&value, &idi);

          insert(vec,  value, index);

          output(vec);

          break;

       case 1:

          printf("删除的位置:");

          scanf("%d",&index);

          delete(vec, index);

          output(vec);

          break;

     }

  }

  free(vec);

  return 0;

}



到此我们就完成了数组的插入和删除操作,至于查找和替换比较简单,就不多说了。

后面我还会上传其他数据结构操作,有兴趣的小伙伴可以找我一起探讨。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值