您的位置:首页 > 理论基础 > 数据结构算法

再回首,数据结构——循环队列上的常见操作

2015-05-28 11:12 519 查看
       最近在复习数据结构,顺便看看大一的时候写的代码,看完之后比当初有了更加深刻的体会。
 
      希望这些能提供给初学者一些参考。

//循环队列的类型描述
#define MaxSize N
typedef struct
{
ElementType elem[MaxSize];
int front, rear;
}CirQueue;

//初始化队列
CirQue InitQueue()
{
CirQue q;
q.front = q.rear = 0;
return (q);
}

//判断队列 q 是否为空 QueueEmpty(q)
int QueueEmpty (CirQueue q)
{
return (q.front == q.rear);
}

//求队列q的长度 QueueLength(q)
int QueueLength(CirQueue q)
{
return ((q.rear - q.front + MaxSize)%MaxSize);
}

//获取队列 q 队首元素的值 GetHead(q)
ElementType GetHead(CirQueue q)
{
if (QueueEmpty(q))
return (nil);
return q.elem[(q.front+1)%MaxSize];
}

//将元素 e 入队列 AddQueue(q, e)
void AddQueue (CirQueue *q, ElementType e)
{
if (q->front == (q->rear+1)%MaxSize)
printf ("Full");
else
{
q->rear = (q->rear+1)%MaxSize;
q->elem[q->rear] = e;
}
}

//删除队首元素 DeleteQueue(q)
ElementType DeleteQueue (CirQueue *q)
{
if (EmptyQueue(*q))
return nil;
else
{
e = q->elem[(q->front+1)%MaxSize];
q->front = (q->front+1)%MaxSize;
return e;
}
}

//双端队列的队首插入
void AddQueueInFront(CirQueue *q, ElementType e)
{
if (q->front == (q->rear+1)%MaxSize)
printf ("Full");
else
{
q->elem[q->front] = e;
q->front = (q->front-1+MaxSize)%MaxSize;
}
}
//双端队列的队尾删除
ElementType DeleteQueueInRear(CirQueue *q)
{
if (q->front == q->rear)
return nil;
else
{
e = q->elem[q->rear];
q->rear = (q->rear+1)%MaxSize;
return e;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构