# include <stdio.h>
# include <malloc.h>
//队列的特点是 =》先进先出
//所以 出列是从头元素出列
// 入列的从尾元素入列
typedef struct Queue
{
int * pBase;
int front; //出列 (队列头元素)
int rear; //入列 (队列尾元素)
}QUEUE,* pQUEUE;
//初始化队列
void init(pQUEUE pQ);
//是否满的
bool is_full(pQUEUE pQ);
//入列
bool en_queue(pQUEUE pQ,int val);
//输出队列元素
void traverse(pQUEUE pQ);
//是否空格
bool is_empty(pQUEUE pQ);
//出列
bool out_queue(pQUEUE pQ,int * pVal);
int main(void)
{
Queue Q;
init(&Q);
en_queue(&Q,1);
en_queue(&Q,2);
en_queue(&Q,3);
en_queue(&Q,4);
en_queue(&Q,5);
en_queue(&Q,6);
en_queue(&Q,7);
traverse(&Q);
int val;
if(out_queue(&Q,&val)){
printf("出列成功 %d \n", val);
}
traverse(&Q);
return 0;
}
void init(pQUEUE pQ)
{
pQ->pBase = (int *)malloc(sizeof(int) * 6);
pQ->front = 0;
pQ->rear = 0;
}
bool is_full(pQUEUE pQ)
{
if((pQ->rear+1) % 6 == pQ->front) //不超过一圈||超过则表示已经满了
return true;
else
return false;
}
bool en_queue(pQUEUE pQ,int val) //入列数组尾元素入列
{
if( is_full(pQ) ){
return false;
}else{
pQ->pBase[pQ->rear] = val; //规定,入列时尾指针+1
pQ->rear = (pQ->rear+1) % 6; //循环队列 (数组指向下一个)|| 范围只能在数组的大小之间,形成一个臆想的环状结构 || 当超过6则满
return true;
}
}
void traverse(pQUEUE pQ)
{
int i = pQ->front;
while(i != pQ->rear) //只要不相等,就说明还有元素未输出
{
printf("%d ",pQ->pBase[i]);
i = (i+1) % 6; //在一个循环内
}
printf("\n");
}
bool is_empty(pQUEUE pQ)
{
if(pQ->front == pQ->rear){
return true;
}else{
return false;
}
}
bool out_queue(pQUEUE pQ, int * pVal) //出列数组头元素出列
{
if(is_empty(pQ)){
return false;
}else{
*pVal = pQ->pBase[pQ->front]; //规定,出列时头指针+1
pQ->front = (pQ->front+1) % 6;
}
}
循环队列结构(C语言)
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 补充内容:基本数据类型转化5/3=1(1)隐式转化:float _f=int t/int _t1赋值号两边不同时,...