版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/CSDN___CSDN/article/details/82756017
队列的基本概念及其描述
队列是一种特殊的线性表,它的特殊性在于队列的插入和删除操作分别在表的两端进行。
插入的那一端称为队尾,删除的那一端称为队首。队列的插入操作和删除操作分别称为进队和出队。
先进先出(First In First Out)
顺序队列要掌握以下操作:
1、队列的初始化
2、判断队列是否为空
3、打印队列的节点值
4、取得队列的队首节点值
5、队列的插入操作(从队尾插入)
6、队列的删除操作(从队首删除)
运行环境:Code::Blocks 17.12
下面是头文件
#ifndef SEQQUEUE_H_INCLUDED
#define SEQQUEUE_H_INCLUDED
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef int datatype;
typedef struct
{
datatype a[MAXSIZE];
int front_;
int rear_;
}sequence_queue;
//队列(顺序存储)初始化
void init(sequence_queue *sq)
{
sq->front_=0;
sq->rear_=0;
}
//判断队列(顺序存储)是否为空
int isempty(sequence_queue sq)
{
return (sq.front_==sq.rear_?1:0);
//是空的话返回1
}
//打印队列的节点值
void display(sequence_queue sq)
{
int i;
if (isempty(sq))
{
printf("\n该队列是空的!\n\n");
}
else
{
for(i=sq.front_;i<sq.rear_;i++)
{
printf("%5d",sq.a[i]);
}
}
}
//取得队列(顺序储存)的队首节点值
datatype get(sequence_queue sq)
{
if(isempty(sq))
{
printf("\n该队列是空的,无法获得队首节点值。\n\n");exit(1);
}
return sq.a[sq.front_];
}
//队列(顺序储存)的插入操作
void insert_(sequence_queue *sq,datatype x)
{
if(sq->rear_==MAXSIZE)
{
printf("\n该队列是满的\n");
}
else
{
sq->a[sq->rear_]=x;
sq->rear_++;
printf("\n插入成功!\n\n");
}
}
//队列(顺序储存)的删除操作
void del(sequence_queue *sq)
{
if(sq->front_==sq->rear_)
{
printf("\n该队列是空的不能进行删除操作!\n\n");
}
else
{
sq->front_++;
printf("删除成功!\n\n");
}
}
void menu()
{
printf("\t|===================================|\t\n");
printf("\t| |\t\n");
printf("\t| 顺序队列及其实现 |\t\n");
printf("\t| |\t\n");
printf("\t|===================================|\t\n");
printf("\t|有如下选项: |\t\n");
printf("\t|===================================|\t\n");
printf("\t|【1】队列的初始化 |\t\n");
printf("\t|【2】判断队列是否为空 |\t\n");
printf("\t|【3】打印队列的节点值 |\t\n");
printf("\t|【4】取得队列的队首节点值 |\t\n");
printf("\t|【5】队列的插入操作 |\t\n");
printf("\t|【6】队列的删除操作 |\t\n");
printf("\t|===================================|\t\n");
printf("\t|Ctrl+C结束该程序!!! |\t\n");
printf("\t|===================================|\t\n");
}
#endif // SEQQUEUE_H_INCLUDED
下面是主程序
#include <stdio.h>
#include "seqqueue.h"
int main ()
{
int a,i,k;
sequence_queue sq;
init(&sq);
while(1)
{
menu();
printf("请输入你的选择:");
scanf("%d",&a);
switch(a)
{
case 1:
{
init(&sq);
printf("已成功初始化一个队列!\n\n");
break;
}
case 2:
{
if(isempty(sq))
{
printf("该队列为空!\n\n");
}
else
{
printf("该队列不为空!\n\n");
}
break;
}
case 3:
{
display(sq);
printf("\n已成功打印队列的节点值!\n\n");
break;
}
case 4:
{
printf("%d",get(sq));
break;
}
case 5:
{
printf("请输入一个想要插入的数:");
scanf("%d",&a);
insert_(&sq,a);
break;
}
case 6:
{
del(&sq);
break;
}
}
}
return 0;
}