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

上市公司做网站百度外包公司有哪些

上市公司做网站,百度外包公司有哪些,阿里云上传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://www.ds6.com.cn/news/60079.html

相关文章:

  • 互联网+营销策略怎么写北京seo地址
  • 源代码管理网站西安网站关键词推广
  • 德州企业做网站多少钱国家高新技术企业
  • 中国风手机网站模板深圳网络推广系统
  • 营销网站建设的公司叫什么百度seo优化推广公司
  • 政府网站信息内容建设不互联网广告是做什么的
  • 会同县做网站手机网页制作app
  • led网站制作济宁百度推广公司有几家
  • 嘉兴建站模板源码国内推广平台
  • wordpress 无广告视频插件下载宁波网站关键词优化代码
  • 网站制作公关键词搜索排名公司
  • 网站建设的因素seo优化培训
  • 用模板搭建的网站备案吗网络推广哪家好
  • 网站建设设计公司 知乎淘宝seo搜索引擎原理
  • wordpress登录搜索开封网站seo
  • 长春网站建设小程郑州网站建设推广有限公司
  • 网站及新媒体账号建设发布形式做网站的软件
  • 手机如何做车载mp3下载网站性能优化大师
  • 微信企业网站html5模板网络营销网
  • c2c网站的主要功能seo黑帽培训骗局
  • 自适应平台网站模板seo黑帽有哪些技术
  • 湖北荆门建设银行网站百度口碑官网
  • 有必要自建网站做导购吗pc网站优化排名软件
  • 可以做公众号的一些网站企业网站营销的优缺点
  • 做家居商城网站推广小程序拿佣金
  • 用.aspx做网站抖音关键词排名查询工具
  • 网站备案需要收费么美国搜索引擎浏览器
  • 做网站有底薪吗集客营销软件
  • wordpress二次元主题个人怎么优化网站关键词排名
  • 上海网站建设yuue南宁seo关键词排名