#include <stdio.h> #include <stdlib.h> struct List{ int *array; int capacity; int size; };//定义顺序表,保存了数组(用指针),顺序表容量,顺序表元素个数 typedef struct List List;//别名 _Bool init(List *list){ list->array = (int *)malloc(sizeof(int)*10); if(list->array ==NULL) return 0; list->capacity = 10; list->size = 0; return 1; }//初始化,注意判断 _Bool insert_List(List *list,int element,int index){ if(index<1||index>list->size+1) return 0;//index要大于0并且index要按照顺序,最多是顺序表的后一位 if(list->size == list->capacity){ int newCapacity = list->capacity + (list->capacity>>1); int *New = realloc(list->array,newCapacity*sizeof(int)); if(New ==NULL) return 0; list->array = New; list->capacity = newCapacity; }//扩容,用rea_ll_oc函数 for(int i=list->size;i>index-1;i--) list->array[i] = list->array[i-1];//定位到数组后面的空挡,循环条件是到要插入的位置,执行的操作是后移。 list->array[index-1]=element; list->size ++; return 1; }//增加的操作 _Bool delete_List(List *list,int index){ if(index<1||index>list->size) return 0; for(int i=index-1;i<list->size-1;i++) list->array[i] = list->array[i+1]; list->size -- ; return 1; } void print(List*list){ for(int i=0;i<list->size;i++) printf("%d ",list->array[i]); printf("\n"); }//打印 int size_List(List *list){ return list->size; }//获取数据大小 int *get_List(List*list,int index){ if(index<1||index>list->size) return NULL; return &(list->array[index-1]); }//获取指定位序的数据 int find_List(List *list,int target){ int left=0,right = list->size-1; int mid=0; while(left<=right){ mid = (left+right)/2; if(list->array[mid]>target) right = mid-1; else if(list->array[mid]<target) left = mid+1; else return mid+1; } return -1; }//查找位序 int main()//主函数实现 { List list; if(init(&list)){ for(int i=0;i<=30;i++){ insert_List(&list,i*10,i+1); } delete_List(&list,10); delete_List(&list,10); print(&list); printf("%d ",find_List(&list,300)); } else { exit(0); } }
C语言顺序表的实现
最新推荐文章于 2024-07-19 19:11:19 发布