队列的基本操作

结构体

typedef struct {
	int data[maxsize];
	int front, rear;//front为对头指针,rear为队尾指针
	int tag;//标志位
	int size;//记录数据元素
}sqquene;

初始化队列

int initquene(sqquene* q)//初始化队列
{
	q->rear = q->front = 0;
}

因为1.可以牺牲一个单元来区分队空和队满
    队满条件为:(q.rear + 1) % maxsize == q.front
    对空条件为 : q.front == q.rear
    队列中的元素个数为(q.rear - q.front + maxsize) % maxsize
2.可以设一个记录元素个数的数据成员
    对空条件为:q.front == q.rear && q.size == 0;
    队满条件为:q.front == q.rear && q.size == maxsize;
3.可以设一个标志位
    每次删除成功,令tag=0;插入成功时,令tag=1;
    对空条件为q.front == q.rear && tag == 0;
    队满条件为q.front == q.rear && tag == 1;判空有很多种方法

int queneempty(sqquene* q)//队列判空
{
	if (q->rear == q->front)
		return true;
	else return false;
}

进队操作

int enquene(sqquene* q, int x)//进队操作
{
	if ((q->rear+1)%maxsize==q->front)
		return false;
	q->data[q->rear] = x;
	q->rear=(q->rear+1)%maxsize;
	return true;
}

出队操作

int dequene(sqquene* q, int* x)//出队操作
{
	if (q->front==q->rear)
		return false;
	*x = q->data[q->front];
	q->front = (q->front + 1) % maxsize;
	return true;
}

完整测试代码

#define maxsize 10  
#define true 1  
#define false 0  
typedef struct {
	int data[maxsize];
	int front, rear;//front为对头指针,rear为队尾指针
	int tag;//标志位
	int size;//记录数据元素
}sqquene;
int initquene(sqquene* q)//初始化队列
{
	q->rear = q->front = 0;
}
int queneempty(sqquene* q)//队列判空
{
	if (q->rear == q->front)
		return true;
	else return false;
}
int enquene(sqquene* q, int x)//进队操作
{
	if ((q->rear+1)%maxsize==q->front)
		return false;
	q->data[q->rear] = x;
	q->rear=(q->rear+1)%maxsize;
	return true;
}
int dequene(sqquene* q, int* x)//出队操作
{
	if (q->front==q->rear)
		return false;
	*x = q->data[q->front];
	q->front = (q->front + 1) % maxsize;
	return true;
}
#include
int main()
{
	sqquene q;
	initquene(&q);
	if (!queneempty(&q)) //队列判空  
		printf("队列不为空\n");
	else
		printf("队列为空\n");
	int x = 0;
	printf("要进队的元素为:");
	scanf("%d", &x);
	if (enquene(&q, x)) //进队操作  
		printf("进队元素为%d\n", x);
	else
		printf("队列满,不能进队%d\n", x);
	if (dequene(&q, &x)) //出队操作  
		printf("出队元素为%d\n", x);
	else
		printf("队列为空,不能出队\n");
	printf("%d\n", x);
}

队列的基本操作_第1张图片

你可能感兴趣的:(算法,c语言)