最近在复习数据结构,顺便看看大一的时候写的代码,看完之后比当初有了更加深刻的体会。
希望这些能提供给初学者一些参考。
//循环队列的类型描述
#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;
}
}