列表的实现

来源:互联网 发布:朱炫热血知乎 编辑:程序博客网 时间:2024/05/21 11:49
#include <stdio.h>#include <stdlib.h>#define MAX_SIZE10// 当前最大的容量#define INCREASE_SIZE2 // 每次增大的容量typedef struct List {int * data;int size;int current_size;}List;/*列表初始*/void initial(List * list){list->current_size = 0;list->size = MAX_SIZE;list->data = malloc(MAX_SIZE * sizeof(int));if(list->data == NULL){printf("not more momery!");exit(EXIT_FAILURE);}for(int i=0; i<MAX_SIZE; i++)list->data[i] = 0;}/*打印当前的列表元素*/void display(List * list){printf("%s","当前的列表元素:");for(int i=0; i<list->current_size; i++)printf("%d ",list->data[i]);printf("\n");}/* 在before_index之前插入数据,允许范围为: * 第1到第current_size+1个的位置前,则0-current_size * 注意是不能随便在列表的尾部后隔几个再插入的 */int insert(List *list, int before_index, int data){if(before_index < 1 || before_index > list->current_size + 1) // 判断位置是否正确{printf("error position\n");return -1;}if(list->current_size == list->size)// 列表已经满了{int * new_data = realloc(list->data,(list->size + INCREASE_SIZE) * sizeof(int));list->size += INCREASE_SIZE;list->data = new_data;}for(int i=list->current_size; i>=before_index; i--) // 将待插入位置的现元素及其后的元素后移{list->data[i] = list->data[i-1];}list->data[before_index-1] = data;list->current_size += 1;return 0;}/*删除第几个元素*/int delete(List *list, int index){if(index < 1 || index > list->current_size){printf("%s","error position\n");return -1;}for(int i=index; i<list->current_size;i++){list->data[i-1] = list->data[i];}list->current_size --;return 0;}int main(){List list;initial(&list);while(1){int choice;printf("make you choice:");scanf("%d",&choice);int data;int index;switch(choice){case 1:printf("输入在第几个为之前插入,有效范围为[1 到 当前元素个数(%d)+1]:",list.current_size);scanf("%d",&index);printf("插入的元素值为:");scanf("%d",&data);insert(&list,index,data);display(&list);break;case 2:printf("要删除的元素所在的位置为:");scanf("%d",&index);delete(&list,index);display(&list);break;default:break;}}return 0;}
代码练习 :)
原创粉丝点击