顺序队列的概念及其基本运算

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

//seqQueue.cpp
#include"seqQueue.h"
/*
 * @file      seqQueue.cpp
 * @function  队列初始化
 * @author    酸菜。
 * @date      2019-09-17
*/
void initseqQueue(SeqQueue* Queue)
{
	Queue->front = 0;

	Queue->rear = 0;

	Queue->length = 0;

}
/*
 * @file      seqQueue.cpp
 * @function  进队
 * @author    酸菜。
 * @date      2019-09-17
*/
int  inseqQueue(SeqQueue* Queue, int* value)
{
	if (Queue->front == (Queue->rear + 1) % max)
	{

		printf("队列已满,无法入队:!");

		return 0;

	}

	Queue->data[Queue->rear] =*value;

	Queue->rear++;

	Queue->length++;

	return 1;

}
/*
 * @file      seqQueue.cpp
 * @function  出队
 * @author    酸菜。
 * @date      2019-09-17
*/
int  outseqQueue(SeqQueue* Queue,element* ment)
{
	static int i = 0;

	if (Queue->front == Queue->rear)
	{

		printf("队列为空,无法出队:!");

		return 0;

	}

	ment->ment[i] = Queue->data[Queue->front];

	Queue->front++;

	Queue->length--;

	i++;

	return 0;

}
/*
 * @file      seqQueue.cpp
 * @function  队是否满
 * @author    酸菜。
 * @date      2019-09-17
*/
int seqQueue_is_full(SeqQueue* Queue)
{

	return Queue->front == (Queue->rear + 1) % max;//如果数组的空间为10,当存储了9个元素时,则认为满了,即浪费一个存储空间

}
/*
 * @file      seqQueue.cpp
 * @function  队是否空
 * @author    酸菜。
 * @date      2019-09-17
*/
int seqQueue_is_empty(SeqQueue* Queue)
{

	return Queue->front == Queue->rear;

}



//以下为函数的另一种写法

/*
* @file      seqQueue.cpp
* @function  队列初始化
* @author    酸菜。
* @date      2019 - 10 - 31
*/
void initseqQueue(SeqQueue* Queue)
{
	
	Queue->length = 0;

	Queue->front = Queue->rear = max - 1;

}
/*
 * @file      seqQueue.cpp
 * @function  进队
 * @author    酸菜。
 * @date      2019 - 10 - 31
*/
int  inseqQueue(SeqQueue* Queue, int* value)
{
	if (Queue->front == (Queue->rear + 1) % max)
	{

		printf("队列已满,无法入队:!");

		return 0;

	}

	Queue->rear = (Queue->rear + 1) % max;

	Queue->data[Queue->rear] = *value;

	Queue->length++;

	return 1;

}
/*
 * @file      seqQueue.cpp
 * @function  出队
 * @author    酸菜。
 * @date     2019 - 10 - 31
*/
int  outseqQueue(SeqQueue* Queue, element* ment)
{
	static int i = 0;

	if (Queue->front == Queue->rear)
	{

		printf("队列为空,无法出队:!");

		return 0;

	}

	Queue->front = (Queue->front + 1) % max;

	ment->ment[i] = Queue->data[Queue->front];

	Queue->length--;

	i++;

	return 0;

}
/*
 * @file      seqQueue.cpp
 * @function  队是否满
 * @author    酸菜。
 * @date      2019 - 10 - 31
*/
int seqQueue_is_full(SeqQueue* Queue)
{

	return Queue->front == (Queue->rear + 1) % max;

}
/*
 * @file      seqQueue.cpp
 * @function  队是否空
 * @author    酸菜。
 * @date     2019 - 10 - 31
*/
int seqQueue_is_empty(SeqQueue* Queue)
{

	return Queue->front == Queue->rear;

}
void show_seqQueue(SeqQueue* Queue)
{
	int i = 0;

	for (i = (Queue->front + 1)%max; i!= (Queue->rear+1)%max; i=(i+1)%max)//从队头遍历到队尾
	{

		printf("当前队内元素为:%d\n", Queue->data[i]);
	}

}

//seqQueue.h
#ifndef     _seqQueue_h
#define     _seqQueue_h

#include<stdio.h>
#include<iostream>
#include<stdlib.h>

typedef int  datatype;
#define max  10

typedef struct element
{
	datatype ment[max];

}element;

typedef struct SeqQueue
{
	datatype data[max];
	int length;//记录队列长度
	int front;//头指针
	int rear;//尾指针

}SeqQueue;

//队列长度也可通过L=(max+rear-front)%max进行判断

extern void initseqQueue(SeqQueue* Queue);
extern int  inseqQueue(SeqQueue* Queue, int* value);
extern int  outseqQueue(SeqQueue* Queue,element* ment);
extern int  seqQueue_is_full(SeqQueue* Queue);
extern int  seqQueue_is_empty(SeqQueue* Queue);
extern void show_seqQueue(SeqQueue* Queue);
#endif // !  _seqQueue_h

//main.cpp
#include"seqQueue.h"
int main(void)
{
	int i = 0;

	int a[10] = { 1,2,3,4,5,6,7,8,9,10 };

	SeqQueue* Queue = (SeqQueue*)malloc(sizeof(SeqQueue));

	element* ment = (element*)malloc(sizeof(element));

	initseqQueue(Queue);

	for (i = 0; i <max-1; i++)//只能入队max-1个,因为后面方便判断满的情况
	{
		inseqQueue(Queue,a+i);

		printf("当前入队元素为:%d\n", a[i]);

	}

	printf("\n");


	for (i = 0; i <5;i++)
	{
		outseqQueue(Queue, ment);

		printf("当前出队元素为:%d\n", ment->ment[i]);

	}
	printf("\n");

	for (i=Queue->front;i <Queue->rear; i++)//从队头遍历到队尾
	{
		
		printf("当前队内元素为:%d\n", Queue->data[i]);

	}
	
	system("pause");

	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值