顺序表(笔记)

    仅为个人学习过程的记录 

    顺序表可以随机访问,即通过表头和元素编号进行访问。

#include 
#include 

//定义顺序表的结构体
typedef struct vector{
int size; //顺序表总容量
int length  //顺序表当前个数
int*data;
} Vector;
//初始化顺序表
void init(Vector *vector, int size) {
  //需要顺序表的容量大小
  vector->size=size;
//初始化的顺序表数量为0;
   vector->length=0;   
  //需要通过malloc动态分配空间
  vector->data=(int*)malloc(sizeof(int)*size); 
}

  注意,malloc动态分配内存,需要手动释放,用free函数

//删除顺序表,手动释放内存,避免泄漏
void clear(Vector *vector) {
    //释放数据以及指针指向的内存空间
free(vector->data); free(vector); }
//插入顺序表元素,由于顺序表vector,插入位置loctaion,插入数值value
int insert(Vector *vector, int location, int value) {
    //注意需先进行边界条件的判断
    if(location<0||location>vector->length){
         return 0;
 }
    //判断是否顺序表已满
    if(vector->length>=vector->size){
      return 0;
   }
   //进行元素的插入
    for(int i=vector->length,i>location;--i){
       vector->data[i]=vector->data[i-1];
    }
     vector->data[location]=value;//插入元素
     vector->length++;
     return 1; //插入成功
}

当顺序表满时,需要对顺序表进行扩容,一般为之前的2倍,顺序表扩容函数

void expand(Vector *vector) {
   //接收原来的顺序表数据 
   int *old_data=vector->data;
   //扩大容量为原2倍
   vector->size=vector->size*2;
   //分配空间 
   vector->data=(int*)malloc(sizeof(int)*vector->size);
    //把原数据放入新顺序表
    for(int i=0;ilength;i++){
        vector->data[i]=old_data[i];
    }
   //释放旧顺序表
    free(old_data);
}

//查找

int search(Vector* vector,int value) {     for(int i=0;ilength;i++){     if(vector->data[i]==value){     return i;     }   } return -1;}

 //删除操作

int delete_node(Vector *vector, int index) { if(index<0||index>vector->length){ return -1; } for(int i=index+1;ilength;i++){ vector->data[i-1]=vector->data[i]; } vector->length--; return 1;}

 
//打印顺序表

void print(Vector*vector) { for(int i=0;ilength;++i){ if(i>0){ printf(" "); } printf("%d",vector->data[i]); } printf("\n"); }


int main() { Vector *a = (Vector *)malloc(sizeof(Vector)); init(a, 10); return 0;

综上,实现了顺序表的初始化,插入,删除,扩容,查找,遍历等功能。

你可能感兴趣的:(杂记,指针,数据结构,c++,python,算法)