数据结构_day02_线性表
线性表:
线性表:==》逻辑结构 ==》 抽象数据类型
==》存储结构 ==》 顺序存储(顺序表)
链式存储(单链表、双链表)
线性表逻辑结构:
线性表(List):由n(n>=0)个同类型数据元素构成的有限序列
顺序表(SeqList):数据元素按地址连续有序排列的线性表(静态存储 例如数组,)
链表(Linked List):数据元素通过指针联系在一起的地址不连续排列的线性表(动态存储)
线性表存储结构:
学会写顺序表(增删查改) 单链表、双链表、双向循环链表
顺序表
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<malloc.h> #define Seqlist_initsize 9 typedef struct Seqlist { int capacity; //顺序表容量(上限) int size; //顺序表存放元素实际数量 int* base; //指向动态内存分配的指针 }Seqlist; Seqlist* init_list(Seqlist* list) //初始化顺序表需要返回Seqlist* 类型 { list->capacity = Seqlist_initsize; //初始化容量定为9(宏定义操作) list->size = 0; //初始化实际存储数量为0 list->base = (int*)calloc(1, sizeof(Seqlist)); //使用calloc给指针分配内存,注意头文件 //list->base 可以作为数组指针,配合list->base[list->size]使用,但只在插入时候这样写 if(list->base == NULL) //创建失败就返回空值结束 { perror("->顺序表创建失败!\n"); return NULL; } return list; //创建成功就返回list指针 } //初始顺序表 void show_list(Seqlist* list) { printf("->打印结果为: \n "); for (int i = 0; i < list->size; i++) { printf("%d ", list->base[i]); } printf("\n"); } //打印顺序表元素 void insert_list(Seqlist *list ) { int insert_key; printf("->请输入需要出入的值:\n"); for (int i = 1; i <= list->capacity; i++) { scanf("%d", &insert_key); list->base[list->size] = insert_key; //插入操作,只有这里使用list->size作为数组下标,其他地方不要这样用 list->size++; //插入完成一次,当前数量加1 } show_list(list); } //插入顺序表元素 void delete_list(Seqlist* list) { printf("->请输入需要删除的元素:\n"); int delete_key; int panduan = 1; scanf("%d",&delete_key); for (int i = 0; i < list->size; i++) { if (delete_key == list->base[i]) { for (int j = i; j < list->size; j++) { list->base[j] = list->base[j + 1]; //覆盖 } list->size--; //每实现一个if,意味着删除一个,当前数量减1 i--; //这里一定要将i--,重新变回迁移之前的位置,不然会漏掉数据 panduan = 0; //这里的panduan是用来判断是否查找的符合删除条件的值的 } } if (panduan) { printf("->未能找到需要删除的数据\n"); } show_list(list); } //删除顺序表元素 void find_list(Seqlist* list) { int find_key; int panduan = 1; printf("->请输入需要查找的元素:\n"); scanf("%d",&find_key); for (int i = 0; i < list->size; i++) { if (find_key == list->base[i]) { printf("->查找到数据为下标[%d]数据,—— %d \n",i,list->base[i]); panduan = 0; } } if (panduan) { printf("->未能查找到需要查找的数据\n"); } show_list(list); } //查找顺序表元素 void change_list(Seqlist* list) { int change_number,change_key; printf("->请输入需要更改的下标位置:\n"); scanf("%d",&change_number); printf("->请输入将对应数据更改后的值:\n"); scanf("%d", &change_key); list->base[change_number] = change_key; //直接改 show_list(list); } //更改顺序表元素 int main() { Seqlist List; //创建顺序表List init_list(&List); //顺序表初始化 int choose; while (1) { printf("﹃﹃﹃﹃﹃﹃﹄﹄﹄﹄﹃﹃ \n"); printf(" 1、插入元素 \n"); printf(" 2、删除元素 \n"); printf(" 3、查找元素 \n"); printf(" 4、更改元素 \n"); printf(" 5、打印元素 \n"); printf("﹄﹄﹄﹄﹄﹄﹃﹃﹃﹃﹃﹃ \n"); printf("请输入需要进行操作的选项!\n"); scanf("%d", &choose); switch (choose) { case 1: insert_list(&List); break; //插入元素 case 2: delete_list(&List); break; //删除元素 case 3: find_list(&List); break; //查找元素 case 4: change_list(&List); break; //更改元素 case 5: show_list(&List); break; //打印元素 default:printf("选项输入错误!请重新输入!\n"); break; } } return 0; } /* *提示:看懂后,大胆写! */

浙公网安备 33010602011771号