数据结构算法之队列

26 篇文章 0 订阅
3 篇文章 0 订阅

队列

队列故事导入:
我们在银行办理业务时,一般是通过排队的方式办理,先来的先办理,后来的后办理。排队办理,顾名思义,这就是队列。
好来盗张图片,加深理解
在这里插入图片描述
队列它的特点的是先进先出,它可以是顺序式也可以是链式存储序列。
/*
队列
顺序表队列
特点是先进先出,有最大值
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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值