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

凡科免费做网站平面设计培训机构排名

凡科免费做网站,平面设计培训机构排名,银川市建设诚信平台网站,wordpress无法找到该页文章目录 一、循环队列的构建二、判断是否为空三、判断队列是否满了四、队列插入五、队列的删除六、队列取头尾 设计循环队列 下面是队列提供的接口函数 typedef struct {int* a;int k;int front;int rear; } MyCircularQueue;MyCircularQueue* myCircularQueueCreate(int k) {…

文章目录

    • 一、循环队列的构建
    • 二、判断是否为空
    • 三、判断队列是否满了
    • 四、队列插入
    • 五、队列的删除
    • 六、队列取头尾

设计循环队列
在这里插入图片描述
下面是队列提供的接口函数

typedef struct {int* a;int k;int front;int rear;
} MyCircularQueue;MyCircularQueue* myCircularQueueCreate(int k) {MyCircularQueue* Queue = (MyCircularQueue*)malloc(sizeof(MyCircularQueue));if(Queue==NULL){perror("malloc fail");return NULL;}Queue->a = malloc(sizeof(int)*(k+1));Queue->k=k;Queue->front = Queue->rear=0;return Queue;
}bool myCircularQueueIsEmpty(MyCircularQueue* obj) {return obj->rear == obj->front;
}bool myCircularQueueIsFull(MyCircularQueue* obj) {return (obj->rear+1)%(obj->k+1)==obj->front;
}bool myCircularQueueEnQueue(MyCircularQueue* obj, int value) {if(myCircularQueueIsFull(obj))return false;else{obj->a[obj->rear]=value;obj->rear++;obj->rear%=(obj->k+1);}return true;
}bool myCircularQueueDeQueue(MyCircularQueue* obj) {if(myCircularQueueIsEmpty(obj))return false;else{obj->front++;obj->front%=(obj->k+1);}return true;
}int myCircularQueueFront(MyCircularQueue* obj) {if(myCircularQueueIsEmpty(obj))return -1;elsereturn obj->a[obj->front];
}int myCircularQueueRear(MyCircularQueue* obj) {if(myCircularQueueIsEmpty(obj))return -1;elsereturn obj->a[(obj->rear-1+obj->k+1)%(obj->k+1)];
}void myCircularQueueFree(MyCircularQueue* obj) {free(obj->a);free(obj);
}

一、循环队列的构建

这里我们用数组构建循环队列,因为如果用链表的话需要前后衔接,用双向循环列表,比较麻烦,用数组的话不需要衔接,因为数组是连续的。
然后就是用循环队列里面需要设置front和rear两个整数来判断这个循环队列是否为空或者是否满了
这里的rear必须是指向尾元素的下一个位置

因为这样容易判断队列是否为空,如果不指向下一个元素那么有一个元素的情况下rear和front的值相同,没有元素的情况下rear与front的值还是相同。

typedef struct {int* a;int k;int front;int rear;
} MyCircularQueue;MyCircularQueue* myCircularQueueCreate(int k) {MyCircularQueue* Queue = (MyCircularQueue*)malloc(sizeof(MyCircularQueue));if(Queue==NULL){perror("malloc fail");return NULL;}Queue->a = malloc(sizeof(int)*(k+1));Queue->k=k;Queue->front = Queue->rear=0;return Queue;
}

二、判断是否为空

1.没有元素的情况下
在这里插入图片描述
2.有元素的情况下
在这里插入图片描述
在这里插入图片描述

bool myCircularQueueIsEmpty(MyCircularQueue* obj) {return obj->rear == obj->front;
}

三、判断队列是否满了

1.第一种情况
在这里插入图片描述

rear+1 = front

2.第二种情况
在这里插入图片描述

这里的rear需要除以一个周期,因为我们开辟了k+1个空间,所以这里的rear对应的值为k,所以需要+1除以一个周期k+1才能回到最开始的位置
即:(rear+1)%(k+1)==front

bool myCircularQueueIsFull(MyCircularQueue* obj) {return (obj->rear+1)%(obj->k+1)==obj->front;
}

四、队列插入

需要判断这个队列是否满了
然后还有个细节的地方,如下图
在这里插入图片描述

此时的rear需要回到第一个位置,不然后面继续插入数据,数组出现越界访问

bool myCircularQueueEnQueue(MyCircularQueue* obj, int value) {if(myCircularQueueIsFull(obj))return false;else{obj->a[obj->rear]=value;obj->rear++;obj->rear%=(obj->k+1);}return true;
}

五、队列的删除

基本上与上面的原理差不多

bool myCircularQueueDeQueue(MyCircularQueue* obj) {if(myCircularQueueIsEmpty(obj))return false;else{obj->front++;obj->front%=(obj->k+1);}return true;
}

六、队列取头尾

取头很简单,重要的是取尾
取尾我们知道rear-1就是尾,但是我们忽略了一种特殊情况
在这里插入图片描述
这种情况下rear-1为负数,所以我们需要回正,再者考虑其他正常情况,我们需要加上队列的一个周期k+1然后%(k+1)

int myCircularQueueFront(MyCircularQueue* obj) {if(myCircularQueueIsEmpty(obj))return -1;elsereturn obj->a[obj->front];
}int myCircularQueueRear(MyCircularQueue* obj) {if(myCircularQueueIsEmpty(obj))return -1;elsereturn obj->a[(obj->rear-1+obj->k+1)%(obj->k+1)];
}
http://www.15wanjia.com/news/169314.html

相关文章:

  • 浙江做网站的公司网站推广策划的思路包括哪些内容
  • 网页设计站有没有帮人做机械设计的网站
  • 网站推广任务 ip点击乐山网站seo
  • 做淘宝客网站性质手机制作海报的软件免费
  • 一个公司做2个产品网站怎么做的郑州网站建设中国建设建设银行
  • 自己设计一个网站首页网站便民服务平台怎么做
  • 帮别人做网站进了看守所wordpress数据库连接错误
  • 商丘睢阳区市政建设局网站哪个网站可以做彩经专家
  • 网站开发就业岗位大鹏附近网站建设
  • 做好网站建设上传网站安装教程视频
  • 长春哪家公司做网站好东莞网站建设网络公司排名
  • 网站制作哪些网站优化 检测响应速度
  • 中山响应式网站美食制作网站模板免费下载
  • 泉州制作手机网站个人帮忙做网站吗
  • 移动网站建设可信赖深圳工信部网站备案信息查询
  • 最新电子产品网站模板南宁平台公司
  • 个人网站效果装修效果图软件
  • 淘宝客 wordpress网站微软雅黑做网站是否侵权
  • 网站开发语言php5.1wordpress 联盟插件
  • 做实验教学视频的网站网站建设平台推广
  • ftp上传网站 需要什么文件手机wap网站cms源码
  • 展示图片的网站模板品牌推广思路
  • 网站在线提交询盘系统 能直接发到邮箱wordpress快捷登录
  • 苏宁易购网站建设的目的网站建设网站排名
  • 做网站好还是网店WordPress主题 Q9
  • 使用php做的网站怎么做一个网站平台
  • 门户网站开发费怎做账免费高清图片素材网
  • 河南省建设劳动学会网站泰安网站建设制作电话号码
  • wordpress上传与安装网站优化步骤
  • 哪些网站可以做兼职设计上海营销平台网站建设