南宁免费自助建站模板,农村自建房设计图一层平房,免费网页申请,市场营销案例什么是队列#xff1f;上一篇文章写了什么是栈#xff0c;用C语言实现了栈#xff0c;既然说了栈#xff0c;不说队列#xff0c;感觉总是少了点什么#xff0c;所以就顺手写一个队列#xff0c;而且最近做项目也用到这个队列的代码。栈的特点是先进后出#xff0c;队列… 什么是队列上一篇文章写了什么是栈用C语言实现了栈既然说了栈不说队列感觉总是少了点什么所以就顺手写一个队列而且最近做项目也用到这个队列的代码。栈的特点是先进后出队列的特点是先进先出从这个特点可以知道队列是比较友好的不像栈那样最开始进去排队的人竟然是最后一个出来的。新建一个队列因为我这个例程是使用链表实现队列的所以新建一个队列实际上就是开辟一个内存空间用来存储队列的头部。跟栈一样我们理解了建立一个队列就是需要建立一个头开辟的这个空间代表的是这个队列就好比你老爸就可以代表你们家庭不管你家有多少人有多少个小孩你老爸始终都是这个家庭的户主。/*创建队列外部释放内存*/
QueueInfo_st *createQueue(void)
{ QueueInfo_st *queue (QueueInfo_st *)malloc(sizeof(QueueInfo_st)); if(NULL queue) { printf(malloc failed\n); return NULL; } queue-next NULL; return queue;
}向队列中插入数据向队列插入数据我做的有点麻烦先是遍历链表找到这个链表的尾部然后再在链表的尾部插入数据看文章的大神有好的方法可以指出来我觉得应该有更加优秀的方法的。/*入队列0表示成非0表示出错*/
int queue_push(QueueInfo_st *s,ElementType value)
{ /*用来保存尾部指针*/ QueueInfo_st *temp (QueueInfo_st *)malloc(sizeof(QueueInfo_st)); if(NULL temp) { printf(malloc failed\n); return FAILURE; } /*找到链表的尾部*/ while(s-next ! NULL) { s s-next; } temp-value value; temp-next s-next; s-next temp; return SUCCESS;
}取出队列的数据取出队列的数据也就是把头部指向的下一个链表里面的数据给取出来取出来要记得释放内存哈这一步尤其重要。/*出队列*/
int queue_pop(QueueInfo_st *s,ElementType *value)
{ /*首先判断队列是否为空*/ if(queue_is_empty(s)) return FAILURE; /*找出队列顶元素*/ *value s-next-value; /*保存等下需要free的指针*/ QueueInfo_st *temp s-next; /*更换队列顶的位置*/ s-next s-next-next; /*释放队列顶节点内存*/ if(temp!NULL)/*先判断指针是否为空*/ free(temp); temp NULL; return SUCCESS;
}源码例程#include stdio.h
#include stdlib.h
#include stdint.h
#include stdbool.h typedef int32_t ElementType; /*队列元素类型*/
#define SUCCESS 0
#define FAILURE -1 /*定义队列结构*/
typedef struct QueueInfo
{ ElementType value; /*队列存储的数据*/ struct QueueInfo *next; /*指向队列的下一个元素*/
}QueueInfo_st; /*函数声明*/
QueueInfo_st *createQueue(void);
int queue_push(QueueInfo_st *s,ElementType value);
int queue_pop(QueueInfo_st *s,ElementType *value);
int queue_top(QueueInfo_st *s,ElementType *value);
int queue_is_empty(QueueInfo_st *s); /*创建队列外部释放内存*/
QueueInfo_st *createQueue(void)
{ QueueInfo_st *queue (QueueInfo_st *)malloc(sizeof(QueueInfo_st)); if(NULL queue) { printf(malloc failed\n); return NULL; } queue-next NULL; return queue;
}
/*入队列0表示成非0表示出错*/
int queue_push(QueueInfo_st *s,ElementType value)
{ /*用来保存尾部指针*/ QueueInfo_st *temp (QueueInfo_st *)malloc(sizeof(QueueInfo_st)); if(NULL temp) { printf(malloc failed\n); return FAILURE; } /*找到链表的尾部*/ while(s-next ! NULL) { s s-next; } temp-value value; temp-next s-next; s-next temp; return SUCCESS;
}
/*出队列*/
int queue_pop(QueueInfo_st *s,ElementType *value)
{ /*首先判断队列是否为空*/ if(queue_is_empty(s)) return FAILURE; /*找出队列顶元素*/ *value s-next-value; /*保存等下需要free的指针*/ QueueInfo_st *temp s-next; /*更换队列顶的位置*/ s-next s-next-next; /*释放队列顶节点内存*/ if(temp!NULL)/*先判断指针是否为空*/ free(temp); temp NULL; return SUCCESS;
}
/*访问队列顶元素*/
int queue_top(QueueInfo_st *s,ElementType *value)
{ /*首先判断队列是否为空*/ if(queue_is_empty(s)) { return FAILURE; } *value s-next-value; return SUCCESS;
}
/*判断队列是否为空空返回1未空返回0*/
int queue_is_empty(QueueInfo_st *s)
{ /*队列顶指针为空则队列为空*/ if(s-next NULL) { printf(队列为空\n); return true; } return false;
} int main(void)
{ int i 0; int data 0; QueueInfo_st * queue; queue createQueue(); for(i 0 ;i 20;i) { queue_push(queue,i); } for(i 0;i20;i) { data 0; queue_pop(queue,data); printf(%d \n,data); }
}总结队列是基本的数据结构考试和笔试应该会经常遇到希望大家在面试的时候还是能随手就写出一个队列秒杀其他同学在实际项目中还需要了解环形队列也是先进先出的队列但是环形队列它还体现在环上我们上面建立的队列是没有大小限制的但是环形队列是有大小限制的如果插入的数据大于环形队列的大小就会把第一个数据给覆盖或者插入失败至于是什么逻辑都是代码实现的都要去看代码理解其中的原理。附加题使用C实现栈关于这个附加题我想起来我有一个邻居他女儿现在是小学一年级班里面的同学读书都非常厉害如果考试考个90分以下的基本就是班级里面的倒数了现在的行业竞争非常激烈小学也是一样你们以为考试考100分就是第一名了吗那么你就是真的想多了考试考105分都是并列几个第一名的所以我们这个题目也是一样使用C来实现一个栈这个跟上一次的文章刚好呼应体现了几个问题一个是C 和C的不同通过面向对象的思想实现栈代码会少很多而且封装也很好。对于初学者也可以理解类的思想构造函数和析构函数等等。这个代码就无偿奉献给大家希望这个附加题让大家比其他同学多5分。扫码或长按关注回复「加群 」进入技术群聊