创建循环队列

本文介绍了一个使用C语言实现的循环队列数据结构。包括队列的初始化、判断队列是否为空或满、元素的入队和出队操作,以及遍历队列等功能。通过具体的代码示例展示了循环队列的基本操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*
 2017年6月18日 22:33:02
 数据结构 (c)
 循环队列
 初始化 入队 出队 是否空 是否满 遍历队列
*/

#include  <stdio.h>
#include  <malloc.h>
#include  <stdlib.h>
typedef struct Queue
{
 int * pBase;
 int front;
 int rear;
 int len;
}SQ, * PSQ;
bool init_queue (PSQ pQueue, int len);//初始化
bool add_queue (PSQ pQueue, int val);//入队
bool del_queue (PSQ pQueue);//出队
bool is_empty (PSQ pQueue);//是否空
bool is_full (PSQ pQueue);//是否满
void traverse_queue (PSQ pQueue);//遍历队列
int main (void)
{
 SQ queue;
 init_queue (&queue, 6);//初始化
 traverse_queue (&queue);//遍历队列
 add_queue (&queue, 521);//入队
 traverse_queue (&queue);//遍历队列
 add_queue (&queue, 1213);//入队
 traverse_queue (&queue);//遍历队列
 add_queue (&queue, -88);//入队
 traverse_queue (&queue);//遍历队列
 add_queue (&queue, 5);//入队
 traverse_queue (&queue);//遍历队列
 del_queue (&queue);//出队
 traverse_queue (&queue);//遍历队列
 del_queue (&queue);//出队
 traverse_queue (&queue);//遍历队列
 del_queue (&queue);//出队
 traverse_queue (&queue);//遍历队列
 del_queue (&queue);//出队
 traverse_queue (&queue);//遍历队列
 del_queue (&queue);//出队
 traverse_queue (&queue);//遍历队列
 add_queue (&queue, 815);//入队
 traverse_queue (&queue);//遍历队列
 add_queue (&queue, 1016);//入队
 traverse_queue (&queue);//遍历队列
 add_queue (&queue, -444);//入队
 traverse_queue (&queue);//遍历队列
 add_queue (&queue, 308);//入队
 traverse_queue (&queue);//遍历队列
 add_queue (&queue, 403);//入队
 traverse_queue (&queue);//遍历队列
 add_queue (&queue, 402);//入队
 traverse_queue (&queue);//遍历队列
 add_queue (&queue, 401);//入队
 traverse_queue (&queue);//遍历队列

 return 0;
}
bool init_queue (PSQ pQueue, int len)//初始化
{
 pQueue->pBase = (int *)malloc(sizeof (SQ) * len);
 if (NULL == pQueue->pBase )
 {
  printf ("内存分配失败,程序崩溃\n");
  return false;
  exit(-1);
 }
 
 else
 {
  pQueue->front = pQueue->rear = 0;
  pQueue->len = len; 
  return true;
 }
}
bool is_empty (PSQ pQueue)//是否空
{
 if ((pQueue->rear) == (pQueue->front ))
  return true;
 else
  return false;
}
bool is_full (PSQ pQueue)//是否满
{
 if ((pQueue->rear +1) == (pQueue->front ))
  return true;
 else
  return false;
}
bool add_queue (PSQ pQueue, int val)//入队
{
 if (is_full (pQueue))
 {
  printf ("\n数组已满\n");
  return false;
 }
 else
 {
  pQueue->pBase [pQueue->rear] = val;
  pQueue->rear = (pQueue->rear + 1) % pQueue->len ;
  return true;
 }
}
bool del_queue (PSQ pQueue)//出队
{
 if (is_empty (pQueue))
 {
  printf("\n数组已空\n");
  return false;
 }
 else
 {
  pQueue->front = (pQueue->front  + 1) % pQueue->len;
  return true;
 }
}
void traverse_queue (PSQ pQueue)//遍历
{
 if (is_empty (pQueue))
  printf("\n数组元素为:空\n");
 else
 {
  printf ("\n数组元素为: ");
  if((pQueue->rear) > (pQueue->front))
  {
   for (int i = pQueue->front; i < pQueue->rear ; ++i)
   {
    printf ("%d ", pQueue->pBase [i]);
   }
   printf ("\n"); 
  }
  else if ((pQueue->rear) < (pQueue->front))
  {
   for (int j = pQueue->front; j < pQueue->len ; ++j)
   {
    printf ("%d ", pQueue->pBase [j]);
   }
   for (int k = 0; k < pQueue->rear; k++)
   {
    printf ("%d ", pQueue->pBase [k]);
   }
   printf ("\n");
  }
 }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值