当前位置 博文首页 > ice_elephant的博客:数据结构算法之队列

    ice_elephant的博客:数据结构算法之队列

    作者:[db:作者] 时间:2021-09-16 15:50

    队列

    队列故事导入:
    我们在银行办理业务时,一般是通过排队的方式办理,先来的先办理,后来的后办理。排队办理,顾名思义,这就是队列。
    好来盗张图片,加深理解
    在这里插入图片描述
    队列它的特点的是先进先出,它可以是顺序式也可以是链式存储序列。
    /*
    队列
    顺序表队列
    特点是先进先出,有最大值
    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
    下一篇:没有了