第一章 线性结构-顺序存储结构
哔哩哔哩数据结构讲解地址:https://space.bilibili.com/356198029
本视频代码讲解地址:https://www.bilibili.com/video/av62157869
代码如下:
//数据结构 第一章 熟练使用 增删查改 #include<stdio.h> #include<stdlib.h> //定义顺序表 typedef struct table { int len; //顺序表存放多少个元素 int max; //顺序表最大存多少个元素 int *array; //存放元素的数组 } List; //顺序表的初始化 void Init(List *L, int Max)//为什么要传指针? { L->array = (int*)malloc(sizeof(int)*Max); L->max = Max; L->len = 0; } void Show(List *L) { printf("List:["); for(int i=0;i<L->len;i++) printf("%d,",L->array[i]); printf("]\n"); } //顺序表的插入 void Insert(List *L, int index, int value) { printf("------顺序表的插入 -------\n"); if(L->len+1<=L->max)//小于最大长度才可以插入哦 { for(int i=L->len;i>=index;i--)//定位到要插入的元素的下标哪里 { L->array[i+1] = L->array[i];//元素一个一个往后挪 } L->array[index] = value; L->len++; } } // 顺序表的删除(根据下标进行删除。也可以根据值,根据值自己思考怎么做) void Delete(List *L, int index) { printf("------顺序表的删除 -------\n"); printf("删除的元素为:%d\n",L->array[index]); for(int i=index;i<L->len;i++)//删除只需要从index 一个个往前挪就行了 L->array[i] = L->array[i+1]; L->len--; } /** * 根据值X删除 * 思路:遍历整个线性表,遇到与删除的X相等的就删除, * 然后break终止查找,输出线性表即可 * @param L 线性表L * @param value 要删除的值 * @return */ void DeleteByValue(List *L, int value) { for(int i = 0; i < L->len; i++) { if(L->array[i] == value)//找到要删除的那个元素value { for(int j = i; j < L->len; j++)//从查找到的这个元素一个个往前挪 { L->array[j] = L->array[j+1];//后一个直接往前挪 } break; //因为只删除第一个,所以第一个找到的删除后就直接break。 } } Show(L); //打印线性表 } //顺序表的查询 (根据下标进行查询) int Find(List *L, int index) { printf("------顺序表的查询 -------\n"); if(index < L->len) return L->array[index]; else return -1; } //顺序表的修改 (根据下标进行修改) void Alter(List *L, int index, int value) { printf("------顺序表的修改 -------\n"); if(index < L->len) L->array[index] = value; } int main() { List L1,L2; Init(&L1,10); Insert(&L1,0,13);//为什么要传地址? Insert(&L1,0,15); Insert(&L1,0,7); Insert(&L1,0,4); Insert(&L1,0,9); Show(&L1); Delete(&L1,2); Show(&L1); printf("查询到下标为3的元素为:%d\n",Find(&L1,3)); Alter(&L1,3,99); Show(&L1); Insert(&L1,3,88); Show(&L1); printf("\n\n----------------------\n\n"); //L2 的操作 Init(&L2,20); Insert(&L2,0,130); Insert(&L2,0,150); Insert(&L2,1,77); Insert(&L2,2,64); Insert(&L2,1,64); Insert(&L2,3,92);//不运行的话 猜猜L2 里面的元素顺序是什么? Show(&L2); Delete(&L2,3); Show(&L2); printf("L1中的表为:"); Show(&L1); printf("L2中的表为:"); Show(&L2); return 0; } /* 上述代码 熟练到不看书,不看任何东西,自己也能写一个类似的顺序表数据结构 可以自己添加功能 比如文件存储 完善条件判断等等。 最重要的地方就在于插入和删除哪里 为了插入元素 后面的元素一个个往后挪 自己先认真理解 然后敲出来 运行出来 下一周 我们来试试顺序表的运用 */
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!