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

建站公司前景网站运营有前途吗

建站公司前景,网站运营有前途吗,哪些网站做魔兽地图,wordpress微信分享插件c语言队列 //表示队列 typedef struct queue{int* arr;//存储区的首地址int in; //存数据的下标int out; //取数据的下标int cap; //存储区的容量int size;//记录队列当中已存入的数据的个数,入队1,出队-1 }queue_t;思路: 入队操作:出队操作…

c语言队列

//表示队列
typedef struct queue{int* arr;//存储区的首地址int in;  //存数据的下标int out; //取数据的下标int cap; //存储区的容量int size;//记录队列当中已存入的数据的个数,入队+1,出队-1
}queue_t;
思路:
入队操作:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

出队操作:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

为什么inout要置0

数组的下标范围是 0 ~ cap-1(比如 cap=6 时,下标只能是 0、1、2、3、4、5)。
当不断入队 / 出队时,inout 会不断递增:

  • in 增长到 cap 时(比如 cap=6in 变成 6),已经超出了数组的最大下标(5),此时如果不处理,下次存数据会导致数组越界错误
  • 同理,当 out 增长到 cap 时,也会超出数组下标范围。

因此,当 in == capout == cap 时,将它们置为 0,相当于让指针 “绕回数组的起始位置”,继续使用前面已经空闲的空间(比如前面的元素已经出队,下标 0、1 等位置空出来了)。

入队置0:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

出队置0:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

具体代码实现:

1. 队列的头文件
//queue.h文件
//队列的头文件,谁包含我的这个头文件,谁就可以用我这个类型的声明和函数的声明
//头文件卫士,避免头文件被重复包含
#ifndef __QUEUE_H__
#define __QUEUE_H__//一.类型的声明
//用结构体表示队列
typedef struct queue{int* arr;  //存储区的首地址int in;    //存数据的下标int out;   //取数据的下标int cap;   //存储区的容量int size;  //记录队列当中已存入的数据的个数,入队+1,出队-1
}queue_t;
//定义队列类型的变量 queue_t queue;
//定义变量的同时得初始化,我们可以将这个初始化操作封装到函数void queueInit(queue_t* p,int cap);里面//二.函数的声明
//队列的初始化
//参数:指向要初始化的队列的指针;队列的容量
//对指针p所指向的队列进行初始化,容量为cap
void queueInit(queue_t* p,int cap);//队列的释放
//参数:指向要释放的队列的指针
//对指针p所指向的队列进行释放
void queueDeinit(queue_t* p);//队列的判空
//参数:指向要判断的队列的指针
//如果指针p所指向的队列为空,返回1;非空则返回0(队列空的判定:size=0)
int queueEmpty(queue_t* p);//队列的判满
//参数:指向要判断的队列的指针
//如果指针p所指向的队列为满,返回1;非满则返回0(队列满的判定:size=cap)
int queueFull(queue_t* p);//入队
//参数:指向目标队列的指针;要入队的数据
//将数据存入指针p所指向的队列中
void queuePush(queue_t* p,int data);//出队
//参数:指向目标队列的指针
//从指针p所指向的队列中取出数据,返回取出的int类型数据
int queuePop(queue_t* p);
#endif
2. 队列的实现
//queue.c文件
#include<stdlib.h> // malloc() free()
#include"queue.h"//队列的初始化
//参数:指向要初始化的队列的指针;队列的容量
//对指针p所指向的队列进行初始化,分配容量为cap的存储区,初始化in、out为0,size为0
void queueInit(queue_t* p,int cap){p->arr = malloc(sizeof(int) * cap);p->in = 0;p->out = 0;p->cap = cap;p->size = 0;//初始状态无数据
}//队列的释放
//参数:指向要释放的队列的指针
//释放指针p所指向的队列的存储区,重置所有成员变量
void queueDeinit(queue_t* p){free(p->arr);p->arr = NULL;p->in = 0;p->out = 0;p->cap = 0;p->size = 0;
}//队列的判空
//参数:指向要判断的队列的指针
//如果指针p所指向的队列为空(size=0),返回1;非空则返回0
int queueEmpty(queue_t* p){return p->size == 0 ? 1 : 0;
}//队列的判满
//参数:指向要判断的队列的指针
//如果指针p所指向的队列为满(size=cap),返回1;非满则返回0
int queueFull(queue_t* p){return p->size == p->cap ? 1 : 0; 
}//入队
//参数:指向目标队列的指针;要入队的数据
//将data存入指针p所指向的队列中,存储位置为arr[in],存入后in递增(达到cap时归零),size递增
void queuePush(queue_t* p,int data){p->arr[p->in] = data;p->in++;p->size++;//in达到存储极限时归零,实现循环存储if(p->in == p->cap){p->in = 0;}
}//出队
//参数:指向目标队列的指针
//从指针p所指向的队列中取出数据,取出位置为arr[out],取出后out递增(达到cap时归零),size递减,返回取出的数据
int queuePop(queue_t* p){int data = p->arr[p->out];p->out++;p->size--;//out达到获取极限时归零,实现循环取数if(p->out == p->cap){p->out = 0;}return data;
}
3. 队列的使用示例
//main.c文件
#include<stdio.h>
#include"queue.h"int main(void){//定义队列queue_t queue;//队列的初始化:容量为6queueInit(&queue,6);int data = 1;//循环入队,直到队列存满//依次存入数据:1 2 3 4 5 6//循环结束条件:队列满时停止存入(queueFull返回1)while(queueFull(&queue) == 0){queuePush(&queue,data);data++;}//循环出队,直到队列为空//依次取出并打印数据:1 2 3 4 5 6//循环结束条件:队列为空时停止取出(queueEmpty返回1)while(queueEmpty(&queue) != 1){printf("%d ",queuePop(&queue));}printf("\n");//队列的释放queueDeinit(&queue);return 0;
}
4. linux关于这个的使用步骤
4.1 创建一个文件夹
mkdir queue
4.2 创建三个文件
touch queue.h
touch queue.c
touch main.c
4.3 queue.cqueue.h写完之后验证一下有没有语法错误,看我的queue.o的文件能不能成功生成
gcc -c queue.c
4.4 生成最终的可执行文件
gcc main.c queue.c -o queue
4.5 运行程序
./queue
4.6 运行之后的结果:

1 2 3 4 5 6

http://www.dtcms.com/a/581953.html

相关文章:

  • Leetcode 48
  • 因需写了个内网运维专用的IP地址管理工具,有点不同
  • 沈阳seo整站优化网页设计大师
  • 瓯北网站制作公司怎么用思维导图做网站结构图
  • 【代码随想录算法训练营——Day61】图论——97.小明逛公园、127.骑士的攻击
  • [Dify 实战] 使用 System Prompt 实现企业级策略管控
  • JVM架构与执行流程详解
  • 02 Prompt组件及使用技巧
  • 做网站能用微软企业公示信息年报
  • 本地赣州网站建设网站建设数据库选择
  • 多维竞争时代:手游ASO优化核心策略与安卓商店差异化
  • Linux命令-e2label命令(设置第二扩展文件系统的卷标)
  • 企业AI开发什么工具好?从“可用”到“好用”的全生命周期管理指南
  • (Linux)ELF格式与库的链接原理
  • 如何做网站的营销网站技术防护建设
  • C++新特性 chr类型编码
  • 指纹浏览器模拟功能的实践体验分享
  • C++ 设计模式《订单的撤销和重做》
  • 国网法治建设网站阿里巴巴推广平台
  • 【AI学习-comfyUI学习-SDXL 风格化提示词节点包(Style Prompt Node Pack) 工作流-各个部分学习-第四节】
  • 怎样建设有价值的网站天津建设工程信息网中标公告
  • 提升大语言模型性能的关键技术清单(from 网络)
  • 【NLP】Penn Treebank 与 Parsing:让计算机看懂句子结构
  • Go 1.25 发布:性能、工具与生态的全面进化
  • 北京市保障性住房建设投资中心网站淮南吧
  • Duilib_CEF桌面软件实战之Duilib编译与第一个界面程序
  • MFC动态加载图片
  • Niagara Launcher 全新Android桌面启动器!给手机换个门面!
  • 【Vue】自定义指令之权限控制
  • asp.net网站第一次运行慢网站建设合同书保密条款