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

       最近在复习数据结构,顺便看看大一的时候写的代码,看完之后比当初有了更加深刻的体会。

 

      希望这些能提供给初学者一些参考。


//循环队列的类型描述
#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;
	}
}


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值