再回首,数据结构——循环队列上的常见操作
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;
}
}
希望这些能提供给初学者一些参考。
//循环队列的类型描述
#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;
}
}
相关文章推荐
- 再回首,数据结构——链式队列上的常见操作
- 数据结构之循环队列操作
- (编程训练)再回首,数据结构——入队列、出队列操作
- 再回首,数据结构——链表上的常见操作
- 【数据结构】——顺序循环队列的相关操作
- 数据结构——循环队列操作
- 再回首,数据结构——字符串与数组的常见操作(顺序存储)
- 再回首,数据结构——顺序栈上的常见操作
- 再回首,数据结构——字符串与数组的常见操作(链式存储,包含朴素匹配算法等)
- 数据结构之静态循环队列(所有操作)
- 数据结构——循环队列操作
- 再回首,数据结构——链栈上的常见操作
- 数据机构(10)--顺序循环队列的实现及相关操作
- 【程序员面试宝典】数据结构基础二单链表循环链表的操作 建立|插入删除|打印|合并
- 数据结构基础之循环队列C语言实现
- 手把手写数据结构之单向循环链表操作
- 数据结构之——队列的基本操作
- C# 数据结构基础-实现循环队列
- 数据结构之队列的基本操作入队出队初始化删除-c++代码实现及运行实例结果
- 数据结构——数组模仿循环队列