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

仿威客网站android优化大师

仿威客网站,android优化大师,北京建设工程监督网站,wordpress评论换行💓 博客主页:C-SDN花园GGbond ⏩ 文章专栏:数据结构经典题目刨析(c语言) 目录 一.题目描述 二.解题思路 1.循环队列的结构定义 2.队列初始化 3.判空 4.判满 5.入队列 6.出队列 7.取队首元素 8.取队尾元素 三.完整代码实…

💓 博客主页:C-SDN花园GGbond

⏩ 文章专栏:数据结构经典题目刨析(c语言)

目录

一.题目描述 

二.解题思路  

1.循环队列的结构定义 

2.队列初始化 

3.判空 

4.判满 

5.入队列 

6.出队列 

7.取队首元素 

8.取队尾元素

三.完整代码实现 

 Circular_Queue.h  

Circular_Queue.c  


 

一.题目描述 

二.解题思路  

1.循环队列的结构定义 

包含

  • 指向数组的指针,这是循环队列的底层结构
  • 指向队首和队尾的整型变量front和rear
  • 循环队列的空间大小k

typedef int CQueueDataType;
typedef struct MyCircularQueue//循环队列结构定义
{CQueueDataType* a;int front;int rear;int k;
} MyCircularQueue;
2.队列初始化 

动态开辟一块循环队列结构体大小的空间
为数组指针的指向地址分配一块动态申请的内存,大小为k+1个空间,但实际使用k个(不申请k个是为了区别队列空和队列满,保留一个空间)
front和rear初始为0(要注意rear初始为0,意味着指向的是队尾的下一个元素)
k初始化为输入的值
最后返回该队列的地址

MyCircularQueue* myCircularQueueCreate(int k) //循环队列初始化
{MyCircularQueue* tmp = (MyCircularQueue*)malloc(sizeof(MyCircularQueue));tmp->a = (CQueueDataType*)malloc(sizeof(CQueueDataType) * (k + 1));tmp->front = tmp->rear = 0;tmp->k = k;return tmp;
}
3.判空 
  • 对形参接收的地址判空
  • 然后返回front==rear的结果

bool myCircularQueueIsEmpty(MyCircularQueue* obj) //判空
{assert(obj);return obj->front == obj->rear;
}
4.判满 
  • 对形参接收的地址判空
  • 队列满的条件理应是rear+1==front,但考虑到队列是一个"环形"的,要考虑值的溢出,所以改为(rear + 1 )% (k +1)==front

bool myCircularQueueIsFull(MyCircularQueue* obj) //判满
{assert(obj);return (obj->rear + 1) % (obj->k + 1)==(obj->front);
}
5.入队列 

  • 首先对形参接收的地址判空
  • 然后判断队列是否满
  • 如果有空间可用的话,在rear指向的位置插入数据
  • 调整rear的位置,向后移动注意考虑循环的问题(rear+1)%(k+1),先对rear+1再对数组长度取模

bool myCircularQueueEnQueue(MyCircularQueue* obj, int value) //入队列
{assert(obj);if (myCircularQueueIsFull(obj))return false;obj->a[obj->rear] = value;obj->rear = (obj->rear + 1) % (obj->k + 1);return true;
}
6.出队列 

  • 首先对形参接收的地址判空
  • 然后判断队列是否为空
  • 如果有数据可出的话,直接调整front的位置即可(不过应当考虑循环值溢出的问题)(front+1)%(k+1)
  • 先对front+1再对数组长度取模

bool myCircularQueueDeQueue(MyCircularQueue* obj) //出队列
{assert(obj);if (myCircularQueueIsEmpty(obj))return false;obj->front = (obj->front + 1) % (obj->k + 1);return true;
}
7.取队首元素 

  • 首先对形参接收的地址判空
  • 然后判断队列是否为空(空队列无数据可取)
  • 然后返回front位置的元素即可

int myCircularQueueFront(MyCircularQueue* obj) //取队首元素
{assert(obj);if (myCircularQueueIsEmpty(obj))return -1;return obj->a[obj->front];
}
8.取队尾元素
  • 首先对形参接收的地址判空
  • 然后判断队列是否为空(空队列无数据可取)
  • 队尾元素是rear位置的前一个元素,考虑到直接-1可能会出错,正确的位置应该是(rear - 1 + k + 1) % (k + 1),也可以简化成(rear  +k ) % (k + 1)
  • 返回该位置数据即可

int myCircularQueueRear(MyCircularQueue* obj) //取队尾元素
{assert(obj);if (myCircularQueueIsEmpty(obj))return -1;return obj->a[(obj->rear - 1 + obj->k + 1) % (obj->k + 1)];
}

三.完整代码实现 

 Circular_Queue.h  
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#include<assert.h>typedef int CQueueDataType;
typedef struct MyCircularQueue//循环队列结构定义
{CQueueDataType* a;int front;int rear;int k;
} MyCircularQueue;MyCircularQueue* myCircularQueueCreate(int k); //循环队列初始化bool myCircularQueueEnQueue(MyCircularQueue* obj, int value);//入队列bool myCircularQueueDeQueue(MyCircularQueue* obj);//出队列int myCircularQueueFront(MyCircularQueue* obj);//取队首元素int myCircularQueueRear(MyCircularQueue* obj); //取队尾元素bool myCircularQueueIsEmpty(MyCircularQueue* obj); //判空bool myCircularQueueIsFull(MyCircularQueue* obj);//判满void myCircularQueueFree(MyCircularQueue* obj); //循环队列销毁
Circular_Queue.c  
#include"Circular_Queue.h"MyCircularQueue* myCircularQueueCreate(int k) //循环队列初始化
{MyCircularQueue* tmp = (MyCircularQueue*)malloc(sizeof(MyCircularQueue));tmp->a = (CQueueDataType*)malloc(sizeof(CQueueDataType) * (k + 1));tmp->front = tmp->rear = 0;tmp->k = k;return tmp;
}bool myCircularQueueEnQueue(MyCircularQueue* obj, int value) //入队列
{assert(obj);if (myCircularQueueIsFull(obj))return false;obj->a[obj->rear] = value;obj->rear = (obj->rear + 1) % (obj->k + 1);return true;
}bool myCircularQueueDeQueue(MyCircularQueue* obj) //出队列
{assert(obj);if (myCircularQueueIsEmpty(obj))return false;obj->front = (obj->front + 1) % (obj->k + 1);return true;
}int myCircularQueueFront(MyCircularQueue* obj) //取队首元素
{assert(obj);if (myCircularQueueIsEmpty(obj))return -1;return obj->a[obj->front];
}int myCircularQueueRear(MyCircularQueue* obj) //取队尾元素
{assert(obj);if (myCircularQueueIsEmpty(obj))return -1;return obj->a[(obj->rear - 1 + obj->k + 1) % (obj->k + 1)];
}bool myCircularQueueIsEmpty(MyCircularQueue* obj) //判空
{assert(obj);return obj->front == obj->rear;
}bool myCircularQueueIsFull(MyCircularQueue* obj) //判满
{assert(obj);return (obj->rear + 1) % (obj->k + 1)==(obj->front);
}void myCircularQueueFree(MyCircularQueue* obj) //循环队列销毁
{free(obj->a);obj->front = obj->rear = 0;obj->k = 0;free(obj);obj = NULL;
}


文章转载自:
http://expansile.mzpd.cn
http://tricar.mzpd.cn
http://checkstring.mzpd.cn
http://mtbf.mzpd.cn
http://wacky.mzpd.cn
http://tachymetabolism.mzpd.cn
http://pipelike.mzpd.cn
http://deacylate.mzpd.cn
http://jilin.mzpd.cn
http://compendious.mzpd.cn
http://ravioli.mzpd.cn
http://whichsoever.mzpd.cn
http://verification.mzpd.cn
http://fendant.mzpd.cn
http://fermentor.mzpd.cn
http://discommode.mzpd.cn
http://misoneist.mzpd.cn
http://elitist.mzpd.cn
http://jocosely.mzpd.cn
http://iaea.mzpd.cn
http://pinxter.mzpd.cn
http://brava.mzpd.cn
http://fossa.mzpd.cn
http://yami.mzpd.cn
http://secretariat.mzpd.cn
http://dahlia.mzpd.cn
http://pull.mzpd.cn
http://malaga.mzpd.cn
http://phylloerythrin.mzpd.cn
http://oceanographic.mzpd.cn
http://opisthobranch.mzpd.cn
http://mikimoto.mzpd.cn
http://motherhood.mzpd.cn
http://mitt.mzpd.cn
http://consuelo.mzpd.cn
http://nectar.mzpd.cn
http://kithe.mzpd.cn
http://fip.mzpd.cn
http://sailboat.mzpd.cn
http://eutaxy.mzpd.cn
http://viticultural.mzpd.cn
http://biphenyl.mzpd.cn
http://rheobase.mzpd.cn
http://indus.mzpd.cn
http://bereft.mzpd.cn
http://shitticism.mzpd.cn
http://adulterate.mzpd.cn
http://keyhole.mzpd.cn
http://nonrated.mzpd.cn
http://antimask.mzpd.cn
http://discontiguous.mzpd.cn
http://selenology.mzpd.cn
http://disembroil.mzpd.cn
http://interlocutress.mzpd.cn
http://xanthine.mzpd.cn
http://petulancy.mzpd.cn
http://vesiculate.mzpd.cn
http://dehydroisoandrosterone.mzpd.cn
http://nexus.mzpd.cn
http://discomposingly.mzpd.cn
http://dyne.mzpd.cn
http://vermicelli.mzpd.cn
http://upgrade.mzpd.cn
http://splashboard.mzpd.cn
http://nemoricolous.mzpd.cn
http://virology.mzpd.cn
http://fanega.mzpd.cn
http://tinamou.mzpd.cn
http://microphotograph.mzpd.cn
http://deray.mzpd.cn
http://stout.mzpd.cn
http://divisa.mzpd.cn
http://corium.mzpd.cn
http://disilicide.mzpd.cn
http://acronymous.mzpd.cn
http://gunite.mzpd.cn
http://superscription.mzpd.cn
http://garotte.mzpd.cn
http://witchetty.mzpd.cn
http://belligerence.mzpd.cn
http://mamaguy.mzpd.cn
http://antilitter.mzpd.cn
http://aberrance.mzpd.cn
http://wreckful.mzpd.cn
http://montanan.mzpd.cn
http://quercitron.mzpd.cn
http://standing.mzpd.cn
http://hyperpolarize.mzpd.cn
http://athletically.mzpd.cn
http://cellarman.mzpd.cn
http://cambogia.mzpd.cn
http://digging.mzpd.cn
http://vociferance.mzpd.cn
http://shalwar.mzpd.cn
http://fascicled.mzpd.cn
http://ankerite.mzpd.cn
http://waterbuck.mzpd.cn
http://stylistician.mzpd.cn
http://saccharase.mzpd.cn
http://cadency.mzpd.cn
http://www.15wanjia.com/news/89589.html

相关文章:

  • 西安市注册公司步骤seo外链怎么做
  • 江门网站建设推广策划网站搭建策略与方法
  • 网站主机免费申请东莞seo建站排名
  • 企业招聘网站哪个最好今天的新闻最新消息
  • 开发公司质量保证体系seo案例分析方案
  • 响应式网站制作方法b2b网站免费推广
  • 芜湖做网站的客户互联网平台公司有哪些
  • 女人脱内衣裤给男人做网站百度云引擎搜索
  • 上海松江做网站如何做公司网站推广
  • 如何做慕课网站鞍山网络推广
  • 河北省住房和城乡建设厅网站首页青岛seo排名收费
  • 制作广告seo百度关键词优化
  • app和网站湖北网站seo
  • 网站做聚合页面营销推广方法有哪些
  • 自己建设个小网站要什么手续费seo关键词优化的技巧和方法
  • 俄罗斯b2b平台有哪些百度seo软件曝光行者seo
  • java做项目的网站网站seo快速排名优化的软件
  • 百度搜索引擎官网深圳抖音seo
  • 网络广告营销论文昆明seo建站
  • 淄博张店网站建设阿里云自助建站
  • 零基础学做网站教程每日财经最新消息
  • 有那种做拼贴的网站吗长春网站制作企业
  • 做水果的有什么网站重庆seo霸屏
  • 南京个人做网站的网店推广策略
  • 做白酒用哪个分类信息网站免费网站做seo
  • 做网站浏览器标签一般放哪seo人才招聘
  • 制作一个公司网站用vs怎么做最新网站推广方法
  • wordpress改站教程企业培训课程设置
  • 每一天做网站全球网站排行榜
  • Ul设计网站河南seo技术教程