队列

队列:只允许一端删除,一端插入(先进先出)

 

#include<stdio.h>
#include<stdlib.h>
#define MAX 10

struct quece
{
	int front;     //队头指针出栈
	int rear;       //队尾指针入栈

	int quece[MAX];
};

typedef struct quece Quece1;
typedef struct quece* Quece2;

enum is_quece{FULL_OK,FULL_NO,EMPTY_OK,EMPTY_NO};

void create_quece(Quece2 *quece)
{
	*quece = (Quece2)malloc(sizeof(Quece1));
	if(*quece == NULL)
	{
		printf("malloc error!\n");
		exit(-1);
	}
}

void init_quece(Quece2 quece)
{
	quece -> front = -1;
	quece -> rear = -1;
}

int is_empty(Quece2 quece)
{
	if(quece -> front >= quece -> rear) //如果队头指针在队尾指针后面说明为空
	{
		printf("empty!\n");
		return EMPTY_OK;
	}
	return EMPTY_NO;
}

int is_full(Quece2 quece)
{
	if(quece -> front == -1)
	{
		if(quece -> rear == MAX -1)
		{
			printf("quece full3!\n");
			return FULL_OK;
		}
	}
	else if(quece -> rear - quece -> front + 1 == MAX)
		return FULL_OK;
	return FULL_NO;
}

int push_quece(Quece2 quece,int num)
{
	int i;
	if(is_full(quece) == FULL_OK)
	{
		printf("full quece!\n");
		return;
	}
	else if(quece -> rear < MAX -1)
	{
		quece -> rear ++;
		quece -> quece[quece -> rear] = num;
	}
	else
	{
		for(i = quece -> front;i < quece -> rear;i++)
		{
			quece -> quece[i - quece -> front] = quece -> quece[i];
		}
		quece -> rear = quece -> rear - quece -> front + 1; //已经存入的数的个数
		quece -> front = 0;                          //队头指针置0,再存入
		quece -> rear ++;
		quece -> quece[quece -> rear] = num;       //在存入数之后接着存入

	}
}


int pop_quece(Quece2 quece)
{
	if(is_empty(quece) == EMPTY_OK)
	{
		printf("empty4\n");
		return;
	}
	return quece -> quece[++ quece -> front];
}

int main()
{
	int i;
	Quece2 quece;

	create_quece(&quece); 

	init_quece(quece);

	for(i = 0;i < MAX;i++)
	{
		push_quece(quece,i + 1);
	}

	printf("----------------\n");

	for(i = 0;i < MAX;i++)
	{
	    printf("num = %d\n",pop_quece(quece));
	}


}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值