当前位置: 首页 > news >正文

厦门网站制作阳哥wordpress 分类 评论

厦门网站制作阳哥,wordpress 分类 评论,wordpress多语言切换,脚上起小水泡很痒是怎么回事❀❀❀ 文章由不准备秃的大伟原创 ❀❀❀ ♪♪♪ 若有转载#xff0c;请联系博主哦~ ♪♪♪ ❤❤❤ 致力学好编程的宝藏博主#xff0c;代码兴国#xff01;❤❤❤ 又和大家见面啦#xff01;在大家看到这个标题的时候其实就已经发现了#xff1a;我们的C语言的基础知识大… ❀❀❀ 文章由不准备秃的大伟原创 ❀❀❀ ♪♪♪ 若有转载请联系博主哦~ ♪♪♪ ❤❤❤ 致力学好编程的宝藏博主代码兴国❤❤❤ 又和大家见面啦在大家看到这个标题的时候其实就已经发现了我们的C语言的基础知识大部分已经学完了呢~真厉害给自己鼓个掌吧啪叽啪叽~ 现在开始我们要进击数据结构了是不是很激动呢诶先憋激动在开始前我们先了解一下数据结构是什么吧 我们在生活中无论什么事几乎都少不了逻辑吧比如是先吃饭还是先睡觉是先给大伟的文章点赞还是先收藏一下(^▽^ )再更具体一点我们的手机软件比如电话啊QQ啊微信啊里面不是都有联系人吗我们可以在手机上对联系人进行一系列操作修改信息增加联系人删除联系人查找联系人等等等等.......这些啊其实都是我们的数据结构。 而概念性来说 数据结构(Data Structure)是计算机存储、组织数据的方式指相互之间存在一种或多种特定关系的 数据元素的集合。 我爱说实话数据结构是非常非常重要的无论是我们刷题目以后面试甚至是以后工作了之后数据结构都是会一直会陪伴我们的而大伟我也会一直陪着大家的(✿◡‿◡) 那我们要如何学好数据结构呢简单像这样就行 哈哈开个玩笑别当真啦其实呢重要的是需要画图和思考虽然这两点在哪里都很重要就是了~ 好的废话不多说那我们就开始今天的内容顺序表吧 顺序表 在动手写码顺序表前我们需要先来分清楚两个概念线性表和顺序表 那有铁汁好奇了线性表是啥呢 线性表linear list是n个具有相同特性的数据元素的有限序列。 线性表是⼀种在实际中⼴泛使 ⽤的数据结构常⻅的线性表顺序表、链表、栈、队列、字符串... 线性表在逻辑上是线性结构也就说是连续的⼀条直线。但是在物理结构上并不⼀定是连续的 线性表在物理上存储时通常以数组和链式结构的形式存储。 简单来说线性表就是在逻辑上是一条线而实际的物理结构不一定是一条线。而我们今天要写的顺序表就是一个线性表且他的底层就是数组是对数组进行了封装。 谈到顺序表我们就有两个选择静态顺序表和动态顺序表。那么这两个有什么区别呢我们通过代码来看一看 静态 typedef int SQLDataType;//重命名int #define N 10 typedef struct SeqList {SQLDataType arr[N];int size;//顺序表的实际大小 }SeqList;//重命名结构体 动态  typedef int SQLDataType; typedef struct SeqList {SQLDataType *arr;int size;int capacity; }SeqList; 不知道大家还记不记得typedef了没错typedef将int 和 struct SeqList进行重命名而我为什么要这么做呢大家可以思考一下其实也就是typedef的好处是什么 鸡屁踢老弟给出了以下几种答案 代码可读性为复杂的数据类型创建简洁的别名提高代码的可读性平台无关性在一些情况下数据类型的大小可能因编译器和操作系统的不同而有所变化可以为不同平台定义相同的别名提高代码的可移植性简化复杂声明声明一个函数指针类型可能会变得更加清晰抽象底层实现使你的代码更容易维护。通过定义数据类型的别名你可以在不影响代码其他部分的情况下更改底层实现提高代码的一致性确保在整个代码库中一致地使用相同的数据类型减少错误和混淆的可能性 umm说的很好不亏是鸡踢屁牢弟简单来说就是便于书写和阅读可以以便后面根据需求修改类型如可以直接把一大片的int改为char且便于维护。 那我们再回到上面的两段代码我们会发现静态顺序表是通过N来确定整个顺序表的最大容积而动态顺序表是定义了个指针后期可以通过动态内存开辟来实现最大容积的变化还有size来确定有效数据capacity来确定最大数据。 这样一对比铁汁们就会发现哪个方法会更好呢  当然是动态更好了对吧 好的我们确定了我们的顺序表是由动态开辟的那我们可以玩对动态表做什么什么呢 来让我们联想到微信联系人我们可以加小姐姐的wx增可以删掉不喜欢的基佬删查找自己的好舍友查修改新加的朋友的备注改。诶~对了我们实现的就是增删查改。 代码实现 和之前的扫雷一样我们还是开了三个文件分别为Sql.c  Sql.h test.c当然了名字是自己取的我这么取的原因是顺序表英文为Sequence List这样子更容易理解 这里插一嘴啊~ 其实关于C语言的命名有一定的规则如大驼峰命名法等有兴趣的铁汁们下来自己查啊~(ง •_•)ง 首先我们先定义个结构体Sql.h当然了别忘了重命名 #includestdio.h #includeassert.h #includemalloc.h typedef int SQLDataType; typedef struct SeqList {SQLDataType *arr;//数组保存数据int size;//有效数据体积int capacity;//最大体积 }SeqList;然后是我们的声明增删查改Sql.h但是在此之外我们还多了一些操作 //顺序表初始化 void SeqListInit(SeqList* ps); //检查空间如果满了进行增容 void CheckCapacity(SeqList* ps); // 顺序表尾插 void SeqListPushBack(SeqList* ps, SQLDataType x); // 顺序表尾删 void SeqListPopBack(SeqList* ps); // 顺序表头插 void SeqListPushFront(SeqList* ps, SQLDataType x); // 顺序表头删 void SeqListPopFront(SeqList* ps); // 顺序表查找 int SeqListFind(SeqList* ps, SQLDataType x); // 顺序表在pos位置插入x void SeqListInsert(SeqList* ps, size_t pos, SQLDataType x); // 顺序表删除pos位置的值 void SeqListErase(SeqList* ps, size_t pos); // 顺序表销毁 void SeqListDestory(SeqList* ps); // 顺序表打印 void SeqListPrint(SeqList* ps);因为一开始只是一张白纸所以初始化一下没问题吧既然都初始化了没有空间怎么可以呢再来个检查空间也没问题吧增的话在头部增加在尾部增加在特定位置增加没话说吧删的话删头删为删特定位置也没话说吧查找修改再打印个链表以便观察最后再销毁有始有终完美 好开码 Sql.c 初始化 void SeqListInit(SeqList* ps) {ps-arr NULL;//一开始啥都没有ps-capacity ps-size 0;//一开始啥都没有 } 检查空间 void CheckCapacity(SeqList* ps) {if (ps-capacity ps-size)//若有效容积等于最大容积了{int newCapacity ps-capacity 0 ? 4 : 2 * ps-capacity;//若顺序表为空先给四个空间若不为空两倍空间SQLDataType* tmp (SQLDataType*)realloc(ps-arr, newCapacity * sizeof(SQLDataType));//扩容开辟空间if (tmp NULL)//若开辟失败{perror(malloc failed!);return;}ps-arr tmp;//修改空间ps-capacity newCapacity;//修改最大体积} } 头插 void SeqListPushFront(SeqList* ps, SQLDataType x) {assert(ps);//断言若ps不为空CheckCapacity(ps);//检查体积够不够了for (int i ps-capacity; i 0; i--){ps-arr[i] ps-arr[i - 1];//从最后一个元素的后一个元素往前覆盖直到第一个元素}ps-arr[0] x;//修改首元素的值ps-size;//修改size的值 } 尾插 void SeqListPushBack(SeqList* ps, SQLDataType x) {assert(ps);CheckCapacity(ps);ps-arr[ps-size] x;//直接在最后一个有效元素有一个位置插入ps-size;//修改size大小 } 特定位置插入 void SeqListInsert(SeqList* ps, size_t pos, SQLDataType x) {assert(ps);assert(pos 0 pos ps-size);//确保pos下标位置有效CheckCapacity(ps);for (int i ps-size; i pos ; i--){ps-arr[i] ps-arr[i - 1];//从最后一个元素后面一个元素开始往前覆盖直到下标为pos位置}ps-arr[pos] x;//修改pos位置的值ps-size;//修改size } 头删 void SeqListPopFront(SeqList* ps) {assert(ps);int i;for ( i 0; i ps-size-1; i){ps-arr[i] ps-arr[i 1];//从前往后一次覆盖}ps-arr[i] -1;//将最后一个元素修改为-1这句代码其实可以不需要放上去也有问题大家思考一下为什么ps-size--;//修改size } 尾删 void SeqListPopBack(SeqList* ps) {assert(ps);ps-arr[ps-size - 1] -1;//同样的这句代码可以有问题并可以不要ps-size--;//修改size } 特定位置删除 void SeqListErase(SeqList* ps, size_t pos) {assert(ps);assert(pos 0 pos ps-size);int i;for ( i pos; i ps-size-1; i){ps-arr[i] ps-arr[i 1];//从pos位置往后依次覆盖}ps-arr[i] -1;//多余错误ps-size--;//修改size } 查找 int SeqListFind(SeqList* ps, SQLDataType x) {assert(ps);for (int i 0; i ps-size; i){if (ps-arr[i] x)return i;//遍历如果找到了返回下标}return -1;//如果找不到返回个无效的下标 } 打印 void SeqListPrint(SeqList* ps) {for (int i 0; i ps-size; i){printf(%d , ps-arr[i]);//遍历一下没啥好说的}printf(\n); } void SeqListDestory(SeqList* ps) {assert(ps);free(ps-arr);//释放空间ps-arr 0;ps-capacity ps-size 0; } OK,OK上面就是我们的的动态单链表的代码实现现在考验大家的大家的记性和认真程度了还记得博主括号内的问题吗不记得呵赶紧回去看o(ε*)  。昂看到了吧简单来说问题就是 ps-arr[i] -1 为什么有问题为什么可以不需要 emm,怎么说捏我们在插入数据的时候范围是不限的吧所以我们也可以插入一个-1进去吧那如果我们现在把这个位置设置为-1那可不可以算是插入了个-1呢’(°ー°〃)所以我们完全可以直接不给他赋值任由他自由反正我们后面也不要关心他的值对吧~ 所以啊我们的代码实现可以多种多样逻辑上和实用性上都要考虑。那我们顺序表的代码写完了不得来玩一玩┗|*0′*|┛ test.c #includeSql.h int main() {SeqList ps;SeqListInit(ps);SeqListPushBack(ps, 1);SeqListPushBack(ps, 2);SeqListPushBack(ps, 3);SeqListPushBack(ps, 4);SeqListPrint(ps);//1 2 3 4SeqListPushFront(ps, 7);SeqListPushFront(ps, 6);SeqListPushFront(ps, 5);SeqListPrint(ps);//5 6 7 1 2 3 4 SeqListPopBack(ps);SeqListPopBack(ps);SeqListPrint(ps);//5 6 7 1 2SeqListPopFront( ps);SeqListPopFront(ps);SeqListPrint(ps);// 7 1 2if (SeqListFind(ps, 1))printf(1的下标为%d\n, SeqListFind(ps, 1));elseprintf(找不到);//1的下标为1SeqListInsert(ps, 1, 5);SeqListPrint(ps);// 7 5 1 2SeqListErase(ps, 2);SeqListPrint(ps);// 7 5 2SeqListDestory(ps);SeqListPrint(ps);//NULLreturn 0; } 让我们看看运行框内打印的是不是和我们想要的一样呢 通过对比我们发现实际输出的结果和我们想要的效果完全一样啊而且代码返回为0这也就说明了我们代码写的没有问题。 害累鼠博主了看到这里还不给大伟来个一键三连o(^▽^)o。今天的顺序表也就到此为止了啊下次带大家来看看顺序表的实际应用~期待着吧 I have no secret of success but hard work. 除辛勤工作之外,我别无成功的秘诀。 本篇博客也就到此为止了送大家一碗鸡汤勉励自己以及这世界上所有追逐梦想的赤子趁年华尚好努力提升自己莫欺少年穷
http://www.pierceye.com/news/504354/

相关文章:

  • 网站建设维护是干什么网站用户需求报告
  • 咸宁网站建设公司水网站模板
  • 移动网站开发教材seo网站排名优化价格
  • 重生做网站小说畅想网络网站建设推广
  • 找个做网站的 优帮云wordpress 判断自定义栏目
  • wordpress文章目录分页wordpress加速优化服务
  • 二级目录网站怎么做小程序开发成都公司
  • 网站标题名字和备案名字网站开发 质量管理
  • 网站与系统开发吉安网站建设收费
  • 湖北襄阳网站建设wordpress电商ar
  • 微做网站环保行业网站建设
  • 昭通做网站公司北京手机网站制作多少钱
  • 昆明企业建网站多少钱如何弄微信小程序
  • wordpress清理网站缓存做的比较简约的网站
  • 青岛高端网站制作中铁建设集团门户密码
  • 公司专业做网站做网站域名起什么作用
  • 推广型网站建设机构如何创建wordpress
  • 做网站交互demo工具在线设计自己的签名免费
  • 做百度推广会送网站吗网站建设和邮箱的关联
  • 假网站如何做济南天桥区网站建设
  • 顺企网我做网站余姚网站建设在哪里
  • 做网站logo用啥软件做电子书网站
  • 企业网站推广的策略有哪些php怎么建立站点
  • 找网站设计公司 看那些wordpress居中
  • 无锡网站营销公司哪家好全屏网页设计尺寸
  • 做第一个网站什么类型网站搜索引擎优化案例
  • 网站代码生成网站网站开发专业 工作意愿
  • ps做网站效果图尺寸如何重庆网站建设选夹夹虫
  • 上鼎工程建设有限公司网站最简单的手机网站制作
  • 网站维护企业网站的后缀名