/*
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");
}
}
}
创建循环队列
最新推荐文章于 2024-03-24 22:09:06 发布