技术标签: c语言 Powered by 金山文档 数据结构与算法 数据结构
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。
队列的特性:
先进先出、后进后出。
只允许 从一端 添加元素,从 另一端 删除元素。
队头 出元素,队尾 进元素。
#define MAX 1000
typedef struct Queue{
int data[MAX]; //顺序存储 数组模拟的队列
int size; //队列的大小(队列中元素的个数)
}Queue, *SeqQueue;
数组头做队头,数组尾做队尾。
SeqQueue init(){
//申请队列空间,即数组空间
SeqQueue p = (Queue *)malloc(sizeof(Queue));
//判断队列空间申请失败
if(!p){
return NULL;
}
//初始化队列大小
p->size = 0;
//初始化队列值为0
for(int i=0; i<MAX ;i++){
p->data[i] = 0;
}
//返回队列指针
reutrn p;
}
void push(SeqQueue p){
//判断队列不存在
if(!p){
return;
}
//判断队列元素是否为满,拿队列当前的长度去跟数组的最大值作比较
if(p->size == MAX){
printf("队列元素已满!\n");
return;
}
int value;
printf("请输入待入队元素值:");
scanf("%d",&value);
//插入元素(进队)
p->data[p->size] = value;
//元素入队,队列长度增加
p->size ++;
}
void push(SeqQueue p){
//判断队列不存在
if(!p){
return;
}
//判断队列元素是否为空,拿队列当前的长度与0比较
if(p->size == 0){
printf("队列元素已空!\n");
return;
}
//出队 删除数组首元素
for(int i=0; i< p->size -1 ;i++){
p->data[i] = p->data[i+1];
}
//元素出队,队列长度减少
p->size --;
}
//结点结构体
struct Node{
int data; //数据域
struct Node* next; //指针域
};
//队列的结构体
typedef struct LQueue{
struct Node header; //头结点
int size; //队列大小
struct Node* pTail; //尾结点指针
}LQueue, *LinkQueue;
LinkQueue init_LinkQueue(){
//创建队列结构体
struct LQueue* myQueue = (struct LQueue*)malloc(sizeof(struct LQueue));
if (!myQueue){
return NULL;
}
//初始化队列长度
myQueue->size = 0;
//初始化队列头指针的指针域
myQueue->header.next = NULL;
myQueue->pTail = &myQueue->header;
return myQueue;
}
void push_LinkQueue(LinkQueue queue, int data){
//本质 尾插
if (!queue){
return;
}
//创建新结点
struct Node * newNode = (struct Node *)malloc(sizeof(struct Node));
if (!newNode){
return;
}
newNode->data = data;
//更新指针的指向
queue->pTail->next = newNode;
newNode->next = NULL;
queue->pTail = newNode;
//更新队列大小
queue->size++;
}
void pop_LinkQueue(LinkQueue queue){
//本质头删
if (!queue){
return;
}
if (queue->size == 0){
printf("空队,无法出队\n");
return;
}
//记录第一个结点
struct Node* pFirst = queue->header.next;
//更新指针的指向
queue->header.next = pFirst->next;
//判断结点存在并释放结点
if (pFirst){
free(pFirst);
}
//队列中只有一个结点的时候,再出队会影响尾指针,需要特判
if (queue->size == 1){
queue->pTail = &queue->header;
}
//队列大小更新
queue->size--;
}
这些问题标志着我后续研究的重点方向,需要我继续深入学习AVFoundation框架的使用,特别是其控制摄像头的具体方法,并探索如何将这些控制整合到机械臂的运动调整中,以确保最终拍摄出的视频质量符合预期。尽管目前市场上有许多稳定设备如平衡环架(gimbal)来辅助拍摄,以求达到稳定和多角度的拍摄效果,但在此篇文章中,我将探索一种独特的解决方案:通过将手机安装在机械臂的末端来进行拍摄,以实现那些传统方法难以捕捉的特殊视角。随着人工智能技术的不断进步和普及,AI与机器人的结合无疑将成为未来技术发展的重要趋势。
文章浏览阅读342次,点赞6次,收藏8次。党员之家服务系统小程序的功能已基本实现,主要包括首页、个人中心、学生管理、教师管理、任务信息管理、报名信息管理、任务排名管理、学习资料管理、每日打卡管理、交流信息管理、回复信息管理、积极分子管理、党员信息管理、交流论坛、系统管理等。论文主要从系统的分析与设计 、数据库设计和系统的详细设计等几个方面来进行论述,系统分析与设计部分主要论述了系统的功能分析、系统的设计思路,数据库设计主要论述了数据库的设计,系统的详细设计部分主要论述了几个主要模块的详细设计过程。
文章浏览阅读8.3k次,点赞5次,收藏12次。作为 admin 用户,请求认证令牌,输入如下命令openstack --os-auth-url http://controller:35357/v3 --os-project-domain-name default --os-user-domain-name default --os-project-name admin --os-username admin token issue报错Failed to discover available identity versions whe._caused by newconnectionerror('
文章浏览阅读4.5k次。可以在桌面安装云顷还原系统软件,利用软件中的网络对拷功能部署批量对拷环境,进行电脑教室软件的批量对拷安装与增量对拷安装。_教室电脑 一起装软件
文章浏览阅读3.1k次,点赞5次,收藏7次。原文链接:https://www.ikaze.cn/article/43写这篇博文的起因是,我在论坛宣传我开源的新项目YTask(go语言异步任务队列)时,有小伙伴在下面回了一句“为什么不用nsq?”。这使我想起,我在和同事介绍celery时同事说了一句“这不就是kafka吗?”。那么YTask和nsq,celery和kafka?他们之间到底有什么不同呢?下面我结合自己的理解。简单的分析一..._任务队列和消息队列
文章浏览阅读1.5k次。1,MyUtuils.kt将被调用的文件class MyUtils { fun show(info:String){ println(info) }}fun show(info:String){ println(info)}2,Java文件调用该类,ClientJava.javapublic class ClientJava { public static void main(String[] args) { /** _java 调用kt 对象
文章浏览阅读174次。用Python的人总少不了与Matplotlib接触,可是我们在引入时Python少不了报错。此时,我们就需要在错误中寻找线索。_如何导入 matplotlib.pyplot 导入失败
文章浏览阅读8.5k次,点赞2次,收藏11次。使用uni-ui UI框架实现表格加分页功能,uni-table 和uni-pagination 组件的使用示例加完整代码。_uniapp table
【代码】HTML5本地存储账号密码。
文章浏览阅读1.6k次。本小结通过transition的钩子函数实现小球半场动画头条-静敏的编程秘诀-vue教程合集知识点1:入场、出厂方法beforeEnter表示动画入场之前,此时,动画尚未开始,可以在beforeEnter中设置元素开始动画之前的起始样式enter表示动画开始之后的样式,这里可是设置小球完成动画之后的,结束状态enter(el,done)el:动画钩子函数的第一个参数:el,..._transition 钩子
主要梳理mybatis多表及动态使用
文章浏览阅读2.9w次,点赞98次,收藏777次。文章目录Qt 多线程操作2.线程类QThread3.多线程使用:方式一4.多线程使用:方式二5.Qt 线程池的使用Qt 多线程操作应用程序在某些情况下需要处理比较复杂的逻辑, 如果只有一个线程去处理,就会导致窗口卡顿,无法处理用户的相关操作。这种情况下就需要使用多线程,其中一个线程处理窗口事件,其他线程进行逻辑运算,多个线程各司其职,不仅可以提高用户体验还可以提升程序的执行效率。Qt中使用多线程需要注意:Qt的默认线程为窗口线程(主线程):负责窗口事件处理或窗口控件数据的更新;子线程负责后台的业_qt 多线程