本篇博客为本人处女作,有不足之处,欢迎大家指出。此博客为原创,若需要转载,请征求本人同意,谢谢。
此次,我们主要讲解数据结构中数组的操作,大家都知道,数组是数据结构中的最基本的结构,对于它的操作,无外乎就增,删,改,查。大家都会使用它,今天我就带领大家一起实现一下数据结构中的对于数组的操作。
首先是初始代码:
#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;
}
到此我们就完成了数组的插入和删除操作,至于查找和替换比较简单,就不多说了。
后面我还会上传其他数据结构操作,有兴趣的小伙伴可以找我一起探讨。