当前位置 博文首页 > ice_elephant的博客:数据结构算法之队列
队列故事导入:
我们在银行办理业务时,一般是通过排队的方式办理,先来的先办理,后来的后办理。排队办理,顾名思义,这就是队列。
好来盗张图片,加深理解
队列它的特点的是先进先出,它可以是顺序式也可以是链式存储序列。
/*
队列
顺序表队列
特点是先进先出,有最大值
1、队列初始化
2、判断队列是否为空
3、判断队列元素是否已满
4、入队
5、出队,删除元素头,两种方法一种是速度慢但节约空间,另外一种速度快但是浪费空间
6、遍历
7、获取头节点
*/
结构特点:
#define MAX_SIZE 10
struct _Node{
int dateType[MAX_SIZE];
int front;
int rear;
}Node;
#include<stdio.h>
#include<Windows.h>
#include<iostream>
#define MAX_SIZE 5
using namespace std;
typedef int dateType;
typedef struct _Queue{
dateType Queue[MAX_SIZE];
int front;
int rear;
}Queue;
//1、队列初始化
bool initQueue(Queue *SQ){
if(!SQ) return false;
SQ->front = 0;
SQ->rear = 0;
return true;
}
//2、判断队列是否为空
bool isEmpty(Queue *SQ){
if(SQ->front==SQ->rear) return true;
return false;
}
//3、判断队列是否已经满
bool isFully(Queue *SQ){
if(SQ->rear==MAX_SIZE) return true;
return false;
}
//4、尾部添加元素
bool addElmdata(Queue *SQ,dateType *date){
if(!SQ||isFully(SQ)){
cout<<"添加元素失败"<<endl;
return false;
}else{
cout<<"成功添加元素"<<*date<<"\t";
}
SQ->Queue[SQ->rear] = *date;
SQ->rear++;
return true;
}
//5、出队,法一
void deleteDateType(Queue*SQ){
if(isEmpty(SQ)){
cout<<"队列中无元素"<<endl;
return;
}
//让所有元素后前移一位
cout<<"成功踢出元素"<<SQ->Queue[SQ->front]<<endl;
for(int i=0;i<SQ->rear-1;i++){
SQ->Queue[i]=SQ->Queue[i+1];
}
SQ->rear--;
}
//5、出队,法二
dateType deleteDates(Queue *SQ){
if(!isEmpty(SQ)&&SQ){
cout<<"成功踢出元素"<<SQ->Queue[SQ->front]<<"\t";
SQ->front++;
return SQ->Queue[0];
}
}
//6、遍历元素
void printElemdate(Queue *SQ){
if(!SQ||isEmpty(SQ)) return ;
cout<<"遍历结点元素:";
for(int i=0;i<SQ->rear;i++){
cout<<SQ->Queue[i]<<"\t";
}
printf("\n");
}
//8、获取头节点元素
void getHead(Queue *SQ,dateType *date){
if(!SQ||!isEmpty(SQ)) return;
*date = SQ->Queue[0];
}
int main1(void){
Queue *Q= new Queue[MAX_SIZE];
if(initQueue(Q)){
cout<<"队列初始化成功"<<endl;
}else{
cout<<"对初始化失败"<<endl;
}
int x;
cout<<"请输入5个元素:"<<endl;
for(int i=0;i<MAX_SIZE;i++){
cin>>x;
addElmdata(Q,&x);
}
cout<<"\n";
for(int i=0;i<8;i++){
deleteDates(Q);
}
//printElemdate(Q);
int y=0;
getHead(Q,&y);
cout<<"\ny:"<<y<<endl;
system("pause");
return 0;
}
cs