C语言实现顺序队列的基本功能

//front指向队列的队头元素,rear指向队尾元素的下一个。因为链式队列有头节点,顺序队列没得头节点
//为了判断是否未满,最后一个空间不放元素
#include <stdio.h>
#include <stdlib.h>

#define MAX 100

struct book
{
	int isbn;
	char name[32];
};

typedef struct node
{
	struct book b[MAX];
	int rear;
	int front;
}sqqueue;

int is_empty_sqqueue(sqqueue sq);
int is_full_sqqueue(sqqueue sq);
void Insert_Sqqueue(sqqueue *sq, struct book data);
void Print_Sqqueue(sqqueue sq);
void Delete_Sqqueue(sqqueue *sq);
void menu(void);

int main(void)
{
	struct book data;
	int choice;
	int ret;
	sqqueue sq;

	sq.rear = sq.front = 0;
	menu();

	while(1)
	{
		printf("please input a chocie:\n");
		scanf("%d",&choice);
		switch(choice)
		{
			case 0:
				exit(1);
			case 1:
				while(1)
				{
					printf("please input isbn and name:\n");
					scanf("%d%s", &data.isbn, data.name);
					if(data.isbn == -1)
					{
						break;
					}
					Insert_Sqqueue(&sq,data);
				}
				break;
			case 2:
				Print_Sqqueue(sq);
				break;
			case 3:
				Delete_Sqqueue(&sq);
				break;
			case 4:
				ret = is_empty_sqqueue(sq);
				if(ret == 1)
					printf("the sqqueue is empty\n");
				else
					printf("the sqqueue is not empty\n");
				break;
			case 5:
				ret = is_full_sqqueue(sq);
				if(ret == 1)
					printf("the sqqueue is full\n");
				else
					printf("the sqqueue is not full\n");
				break;
			default:
				break;
		}
	}

	return 0;
}

void Delete_Sqqueue(sqqueue *sq)
{
	int ret;

	ret = is_empty_sqqueue(*sq);
	if(ret == 1)
	{
		printf("empty sqqueue\n");
		return ;
	}

	sq->front++;
}

void menu(void)
{
	printf("1->Insert_Sqqueue\n");
	printf("2->Print_Sqqueue\n");
	Printf("3->Delete_Sqqueue\n");
	printf("4->is_empty_sqqueue\n");
	printf("5->is_full_sqqueue\n");
}

int is_empty_sqqueue(sqqueue sq)
{
	if(sq.rear == sq.front)							//队列空的条件
		return 1;
	else
		return 0;
}

int is_full_sqqueue(sqqueue sq)
{
	if((sq.rear + 1) % MAX == sq.front)				//队列满的条件
		return 1;
	else
		return 0;
}

void Print_Sqqueue(sqqueue sq)
{
	while(1)
	{
		printf("%d\t%s\n",sq.b[sq.front].isbn, sq.b[sq.front].name);
		sq.front++;
		if(sq.front == sq.rear)
			break;
	}
}

void Insert_Sqqueue(sqqueue *sq, struct book data)
{
	int ret;

	ret = is_full_sqqueue(*sq);
	if(ret == 1)
	{
		printf("sqqueue full\n");
		return ;
	}
	sq->b[sq->rear] = data;
	sq->rear ++;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值