用c语言实现顺序队列(存在假溢出现象,即队列中有空间却无法插入)

/*
 * 用c语言实现顺序队列(存在假溢出现象,即队列中有空间却无法插入)
 */
#include<stdio.h>
#include<stdlib.h>

typedef struct queue
{
	//用来保存元素的数组
	int *a;
	//队头元素下标
	int front;
	//队尾元素下标
	int rear;
	//数组最多容纳的元素个数
	int max;
}qu;

/*
 * 初始化num个字节大小的队列
 */
qu *initqueue(int num)
{
	qu *q=(qu *)malloc(sizeof(qu));
	if(q==NULL)
	{
		printf("create fail!\n");
		exit(1);
	}
	q->front=0;
	q->rear=0;
	q->max=num;
	q->a=(int *)malloc(sizeof(int)*num);
	return q;
}

/*
 * 判断队列是否为空(空:返回0 非空:返回1)
 */
int isempty(qu *q)
{
	//为空
	if(q->front==q->rear)return 0;
	return 1;
}

/*
 * 入队列
 */
void push(qu *q,int value)
{
	//队列未装满
	if(q->rear<q->max)
	{
		q->a[q->rear]=value;
		q->rear++;
	}
	//队列已满
	else
	{
		printf("队列已满,无法插入!\n");
		exit(1);
	}
}

/*
 * 出队列
 */
int pop(qu *q)
{
	if(isempty(q)==0)
	{
		printf("对列为空,无法出队列!\n");
		exit(1);
	}
	int value=q->a[q->front];
	q->front++;
	return value;
}

/*
 * 查看队头元素
 */
int peek(qu *q)
{
	if(isempty(q)==0)
	{
		printf("对列为空,无法查看队头元素!\n");
		exit(1);
	}	
	int value=q->a[q->front];
	return value;
}

int main()
{
	int num=3;
	qu *q=initqueue(num);
	push(q,1);
	push(q,2);
	push(q,3);
	int temp=pop(q);
	printf("出队列元素=%d\n",temp);
	//无法插入,因为存在假溢出问题
	push(q,4);
	temp=pop(q);
	printf("出队列元素=%d\n",temp);
	return 0;
}

 

你可能感兴趣的:(C++,c,C#,D语言)