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

龙口建网站价格深圳app定制开发外包公司

龙口建网站价格,深圳app定制开发外包公司,微梦网站建设,模板网站如何做优化#x1d649;#x1d65e;#x1d658;#x1d65a;!!#x1f44f;#x1f3fb;‧✧̣̥̇‧✦#x1f44f;#x1f3fb;‧✧̣̥̇‧✦ #x1f44f;#x1f3fb;‧✧̣̥̇:Solitary-walk ⸝⋆ ━━━┓ - 个性标签 - #xff1a;来于“云”的“羽球人”。… !!‧✧̣̥̇‧✦‧✧̣̥̇‧✦ ‧✧̣̥̇:Solitary-walk       ⸝⋆   ━━━┓      - 个性标签 - 来于“云”的“羽球人”。 Talk is cheap. Show me the code ┗━━━━━━━  ➴ ⷯ 本人座右铭    欲达高峰,必忍其痛;欲戴王冠,必承其重。   自 信      希望在看完我的此篇博客后可以对你有帮助哟    此外希望各位大佬们在看完后可以互赞互关一下看到必回      一·队的初始化 二·队的销毁 三·出队头删 四·进队尾插 五·队的判空 六·取队头元素 七·取队尾元素 八·求队的大小 九循环队列的基本操作 在进行以下接口的实现中我们需要首先对队有一定的了解 1队的特征队头出元素队尾进元素 2对于队我们又有顺序队和链队之分 3链队它是由一个一个的结点进行连接起来的其次每一个结点又有对应的数据域与指针域 所以说我们的队其实是一个双层嵌套的结构体:一个是对队的自定义结构体队头指                      针队尾指针size注意他可以没有但是为了避免多次的遍历我们这里就设置了                    size记录队的大小另一个就是自定义的结点类型的结构体 1.初始化 这里只需把指向队的头指针尾指针置空即可 void QuequeInit(Queque* p)//对队进行初始化,所以这里传的是指向队的指针(QNode* p)这样写是不对的 {assert(p);p-phead NULL;p-ptail NULL;p-size 0; } 2.销毁 其实同链表的销毁是一样的我们只需把结点进行一个一个的free就行了 还有就是销毁完之后别忘了让头尾指针置空 3.出队 出队首先是队头进行的 这里我们就需要对元素个数进行判断是只有一个元素还是多个元素 元素出队之后别忘了size-- 当队里面只有一个元素的时候把1 删除之后这就是一个空队了所以在出队之后就需要对头尾指针进行置空 当我有多个数据时就正常进行头删就行别忘了对应的头节点需要进行更新 void QuequePop(Queque* p)//出队,在队头进行 {//2种情况 只有1个结点 有多个结点assert(p);assert(!QuequeEmpty(p));//确保队不为空if (p-phead-next NULL){free(p-phead);p-phead p-ptail NULL;return;}else{QNode* next p-phead-next;free(p-phead);p-phead next;}//别忘size--p-size--;//注意--和-1区别 } 4.进队 1进队换言之就是尾插首先我们需要对尾插进来的数据进行结点的创建 2判空 的操作为空此时尾插进来 的数据就是我的新的头尾结点不为空尾插进来的数据就是新的尾结点进行尾结点的更新 void QuequePush(Queque* p,DataType x)//进队在队尾进行 {// 1 创建一个结点 2 对队进行判空操作assert(p);QNode* newnode (QNode*)malloc(sizeof(QNode));//这里是对结点开辟空间sizeof(Queque)这样写是错误的if (newnode NULL){perror(malloc fail\n);return;}//开辟成功newnode-data x;newnode-next NULL;//对队的判空操作if (p-phead NULL){assert(p-ptail NULL);//确保尾指针也为空p-ptail p-phead newnode;}else{p-ptail-next newnode;p-ptail newnode;//尾结点更新}//别忘了sizep-size; } 5.判空 bool QuequeEmpty(Queque* p)//判空 {assert(p);return p-phead NULL p-ptail NULL;//return p-size 0;//注意这里一定要保持size一致性即不要忘了 / -- }6.取队头元素 DataType QuequeFront(Queque* p)//取队头元素 {assert(p);assert(!QuequeEmpty(p));return p-phead-data;//取完队头元素不要忘了-- }7.取队尾元素 DataType QuequeBack(Queque* p)//取队尾元素 {assert(p);assert(!QuequeEmpty(p));return p-ptail-data;}8.队的大小 int QuequeSize(Queque* p)//队的大小 {assert(p);return p-size; }Quqque.h对应完整代码 #pragma once #includestdio.h #includeassert.h #includestdbool.h #includestdlib.htypedef int DataType; //定义一个结构体单链表可以解决没必要用双向链表(单链表)链队列数据域指针域 //注意以下2个结构体不能进行合并 typedef struct QuequeNode {//注意以下只是定义队列的一个结点对应的类型DataType data;//数据域struct SLQuequeNode* next;//指针域 }QNode; typedef struct Queque {//注意以下只是定义队列的类型QNode* phead;//队列的头指针QNode* ptail;//队列的尾指针int size;//记录数据个数避免后续的遍历 }Queque; //队列接口的实现 void QuequeInit(Queque* p);//初始化 void QuequeDestroy(Queque* p);//销毁 void QuequePop(Queque* p);//出队在队头进行 void QuequePush(Queque* p,DataType x);//进队在队尾进行 bool QuequeEmpty(Queque* p);//判空 DataType QuequeFront(Queque* p);// DataType QuequeBack(Queque* p);// int QuequeSize(Queque* p);//队的大小Quqque.c对应完整代码 #define _CRT_SECURE_NO_WARNINGS 1 #includeQueque.hvoid QuequeInit(Queque* p)//对队进行初始化,所以这里传的是指向队的指针(QNode* p)这样写是不对的 {assert(p);p-phead NULL;p-ptail NULL;p-size 0; } void QuequeDestroy(Queque* p)//销毁 {assert(p);/*Queque* pcur p-phead;*///因为是对结点一个一个删除QNode* pcur p-phead;while (pcur){/*Queque* next pcur-next;*///错误写法原因同上QNode* next pcur-next;free(pcur);pcur next;}//别忘了执行以下操作p-phead NULL;p-ptail NULL;p-size 0; } void QuequePop(Queque* p)//出队,在队头进行 {//2种情况 只有1个结点 有多个结点assert(p);assert(!QuequeEmpty(p));//确保队不为空if (p-phead-next NULL){free(p-phead);p-phead p-ptail NULL;return;}else{QNode* next p-phead-next;free(p-phead);p-phead next;}//别忘size--p-size--;//注意--和-1区别 } void QuequePush(Queque* p,DataType x)//进队在队尾进行 {// 1 创建一个结点 2 对队进行判空操作assert(p);QNode* newnode (QNode*)malloc(sizeof(QNode));//这里是对结点开辟空间sizeof(Queque)这样写是错误的if (newnode NULL){perror(malloc fail\n);return;}//开辟成功newnode-data x;newnode-next NULL;//对队的判空操作if (p-phead NULL){assert(p-ptail NULL);//确保尾指针也为空p-ptail p-phead newnode;}else{p-ptail-next newnode;p-ptail newnode;//尾结点更新}//别忘了sizep-size; } bool QuequeEmpty(Queque* p)//判空 {assert(p);return p-phead NULL p-ptail NULL;//return p-size 0;//注意这里一定要保持size一致性即不要忘了 / -- } DataType QuequeFront(Queque* p)//取队头元素 {assert(p);assert(!QuequeEmpty(p));return p-phead-data;//取完队头元素不要忘了-- } DataType QuequeBack(Queque* p)//取队尾元素 {assert(p);assert(!QuequeEmpty(p));return p-ptail-data;} int QuequeSize(Queque* p)//队的大小 {assert(p);return p-size; } test.c对应完整代码 #define _CRT_SECURE_NO_WARNINGS 1#includeQueque.h void Quequetest() {Queque plist;QuequeInit(plist);QuequePush(plist, 1);QuequePush(plist, 2);QuequePush(plist, 3);QuequePush(plist, 4);//QuequePop(plist);//QuequePop(plist);//QuequePop(plist);//QuequePop(plist);while (!QuequeEmpty(plist))//打印队的数据只要不为空即可{printf(%d , QuequeFront(plist));//其实就是取出队头元素QuequePop(plist);//出队}printf(\n);QuequeDestroy(plist);} int main() {Quequetest();return 0; } 9.循环队列的基本操作 对于循环队列自然也是有2 中方式可以实现数组 或者是 链表 循环队列的有点就是避免了空间的浪费可以重复使用 9.1 前期知识的了解 队最基本的性质先进先出队尾进入队头出数据 为例了方便出队进队的操作定义2个指针 rear尾指针front 头指针 数组实现如下 定义一个队的结构 typedef struct Queue { DataType* a ; int  rear  ; int   front ; }Queue; 9.2  循环队列的初始化 问题就来了rear 的初始值到底是  -1 还是 0 其实都可以关键是看自己的需求我以暂时以 rear 0 他可以很直接的表明 队有效 的长度 9.3 进队 9.4 出队 9.5 判空 rear front 9.6  判满 9.7 队头元素获取 这个就很简单了直接对 front这个下标位置进行访问即可 9.8 队尾元素获取 注意rear 是指向队尾元素的下一个位置所以需要 访问的是 rear -1 这个下标位置的数据 OK以上就是对循环队列的简单介绍 下面小试牛刀一把吧 9.9 设计循环队列 题目 OJ代码 typedef struct {// 用数组方式实现循环队列int* a;int front;//队头指针int rear;//队尾指针int k;//队长方便确定数组开多大空间} MyCircularQueue;bool myCircularQueueIsEmpty(MyCircularQueue* obj) {return obj-rear obj-front; }bool myCircularQueueIsFull(MyCircularQueue* obj) {return obj-front (obj-rear1) %(obj-k1);} MyCircularQueue* myCircularQueueCreate(int k) {MyCircularQueue*obj ( MyCircularQueue*)malloc(sizeof( MyCircularQueue));obj-a (int*)malloc(sizeof(int)*(k1));//数组开辟空间obj-front obj-rear 0;obj-k k;return obj; }bool myCircularQueueEnQueue(MyCircularQueue* obj, int value) {if( myCircularQueueIsFull(obj) true)//判断是否满return false;//进队动rear指针obj-a[obj-rear] value;obj-rear (obj-rear1)% (obj-k1);//保证rear 指向队尾元素的下一个位置避免越界return true; }bool myCircularQueueDeQueue(MyCircularQueue* obj) {if(myCircularQueueIsEmpty(obj) true)//是否为空return false;obj-front (obj-front1)% (obj-k1);//避免越界return true; }int myCircularQueueFront(MyCircularQueue* obj) {if(myCircularQueueIsEmpty(obj) true)//是否为空return -1;return obj-a[obj-front]; }int myCircularQueueRear(MyCircularQueue* obj) {if (myCircularQueueIsEmpty(obj) true)//是否为空return -1;//return obj-a[obj-rear];//越界了注意rear是指向队尾元素的下一个位置// if(obj-rear 0)// return obj-a[obj-k];// else// return obj-a[obj-rear-1];return obj-a[((obj-rear - 1) (obj-k 1)) % (obj-k 1)];}void myCircularQueueFree(MyCircularQueue* obj) {free(obj-a);free(obj);} 结语 对于队列这种数据结构在我们的日常生活中还是随处可见的。餐厅的取号买饭任务队列、事件队列、消息队列和时间相关的东西都有队列的影响。所以说学好队列对生活的理解也会更深刻以上就是我share 的内容希望各位可以支持关注谢谢大家
http://www.pierceye.com/news/966008/

相关文章:

  • 如何做网站家具导购做哈尔滨本地门户网站赚钱吗
  • 建立网站的步骤有哪些wordpress 主题
  • 网站功能建设中页面个体户做网站有用吗
  • 网站建设具体要求wordpress启用注册
  • 重庆好的网站建设公司车辆管理网站开发
  • 十大SEO网站外链建设误区城乡住房建设部网站保证金
  • 自己做一元夺宝网站dede 管理多个网站
  • 做app还是做微网站好聚美网站开发开题报告
  • 网站建设总结与科技网站建设+长沙
  • 网博士自助建站系统手机wap网站程序
  • 做网站有什么不好竞价广告
  • 个人网站 cms企业做网站的好处有哪些
  • 公司做网站的费用入账国内电商平台网站制作排行榜
  • 做网站电脑开一天用多少钱怎么做网页动图
  • 织梦做网站教程网站风格要求
  • 网站制作用什么编程百度贴吧网页版登录
  • 站长之家ip查询雄安哪里在建设
  • wdcp创建网站网站开发如何找甲方
  • 做网站运营用什么软件高校支付网站建设费需要入无形资产
  • 在那个网站做ppt可以赚钱网页代码怎么看
  • 免费做企业网站广州萝岗网站建设
  • 开奖网站怎么做wordpress添加广告
  • 开网站需要投资多少钱网站设计两边为什么要留白
  • 任丘市做网站价格泰州网络科技有限公司
  • wap网站使用微信登陆推广公司有哪些
  • 深圳分销网站设计制作买了winhost网站空间在哪里登陆
  • 培训网站项目ppt怎么做wordpress主题4mudi
  • 上海专业网站建设市场网站开发验收报告
  • 怎么做网站视频教程做广告牌子
  • 合肥做网站公网站设网页设计