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

//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;
}



©️2019 CSDN 皮肤主题: 创作都市 设计师: CSDN官方博客