//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;
}
顺序队列的概念及其基本运算
最新推荐文章于 2024-08-02 22:36:07 发布