循环队列

顺序循环队列

#include<stdio.h>
#include<stdlib.h>
#define MAX 100
typedef struct{
	int elem[MAX];
	int front,rear;
}CSequene;
//初始化 
CSequene* InitSequene (){
	CSequene *q; 
	q = (CSequene *)malloc(sizeof(CSequene));
	q->front = q->rear = MAX - 1;//置空队列 
	return q; 
}
//入队 
int InSequene(CSequene *q,int x){
	if ((q->rear+1)%MAX == q->front){
		printf("队满");
		return FALSE; 
	}else{
		q->rear = (q->rear + 1) % MAX;//尾指针后移 
		q->elem[q->rear] = x;
		return 1;
	}
}
//出队 
int Outquene(CSequene* q,int x){
	if (q->rear == q->front){
		printf("队空")return 0; 
	}else {
		q->front = (q->front + 1 % MAX);//首指针后移 
		*x = q->elem[q->front];//读出当前队列的队首元素 
		return 1;
		}
	}
//判空 
int EmptySequene(CSequene *q){
	if (q->front == q->rear){
		return 1;
	}else{
		return 0;
	}
}

链循环队列

#include<stdio.h>
#include<stdlib.h>
typedef struct node{
	int data;
	struct node *next; 
}QNode;
typedef struct {
	QNode *front;
	QNode *rear;
}LQuene;
LQuene *Inin_LQuene(){
	LQuene *q;
	QNode *p;
	q = (LQuene *)malloc(sizeof(LQuene));
	p = (QNode *)malloc(sizeof(QNode));
	p->next = NULL;
	q->front = q->rear = p;
	return q; 
} 
void InLQuene (LQuene *q,int data){
	QNode *p;
	p = (QNode *)malloc(sizeof(QNode));
	p->data = data;
	p->next = NULL;
	q->rear->next = p;//尾插法建立链表 
	q->rear = p;//尾插法建立链表 
}
int Empty_LQuene(LQuene *q){
	if (q->front == q->rear){
		return 0;
	}else{
		return 1;
	}
}
int Out_LQuene(LQuene *q,int *data){
	QNode *p;
	if (Empty_LQuene(q)){
		printf("队空");
	}else{
		p = q->front->next;
		q->front->next = p->next;
		*data = p->data;
		free(p);
		//只有一个元素时,出队后队空,修改队尾指针。
		if (q->front->next == NULL){
			q->rear = q->front;
			return 1;
		}
	}
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值