数据结构——顺序表
1、结构定义
- size:顺序表空间大小;
- length:当前顺序表长度;
- *data:数据;
2、顺序表的操作
- 初始化/创建顺序表;
- 清除顺序表;
- 插入数据;
- 删除数据;
- 扩容;
3、库
vector.h
#ifndef __VECTOR_H__
#define __VECTOR_H__
typedef struct Vector
{
unsigned int size; //顺序表大小
unsigned int length; //顺序表当前长度
unsigned char *data; //顺序表的内容
} Vector;
Vector *Vector_Init(int n);
void Vector_Clear(Vector *v);
char Vector_Expand(Vector *v);
char Vector_Insert(Vector *v, unsigned int dat, unsigned int index);
char Vector_Erase(Vector *v, unsigned int index);
#endif
vector.c
#include <stdio.h>
#include <stdlib.h>
#include <vector.h>
Vector *Vector_Init(int n) //顺序表初始化
{
Vector *v = (Vector *)malloc(sizeof(Vector));
v->data = (unsigned char *)malloc(sizeof(unsigned char) * n);
v->size = n;
v->length = 0;
return v;
}
void Vector_Clear(Vector *v) //清除顺序表
{
if(v == NULL)
{
return;
}
else
{
free(v->data);
free(v);
return;
}
}
char Vector_Expand(Vector *v) //顺序表扩容
{
int extr_size = v->size;
unsigned char *p;
while (extr_size)
{
p = (unsigned char *)realloc(v->data, sizeof(unsigned char) * (v->size + extr_size));
if(p) break;
extr_size >>= 1;
}
if(extr_size == 0)
{
return 0;
}
v->data = p;
v->size += extr_size;
return 1;
}
char Vector_Insert(Vector *v, unsigned int dat, unsigned int index) //顺序表插入
{
if(v == NULL)
{
return -1;
}
if(index < 0 ||index > v->length)
{
return -2;
}
if(v->length == v->size)
{
if(!Vector_Expand(v)) return -3;
// printf("success to expand the vector size is %d\n", v->size);
}
for(unsigned int i = v->length; i > index; i--)
{
v->data[i] = v->data[i - 1];
}
v->data[index] = dat;
v->length += 1;
return 1;
}
char Vector_Erase(Vector *v, unsigned int index) //顺序表元素删除
{
if(v == NULL)
{
return -1;
}
if(index < 0 || index >= v->length)
{
return -2;
}
for(unsigned int i = index + 1; i < v->length; i++)
{
v->data[i - 1] = v->data[i];
}
v->length -= 1;
return 1;
}
************************************************OVER************************************************