zoukankan      html  css  js  c++  java
  • 队列的基本操作(链队列)

    队列和栈差不多,唯一的区别就是栈式先进后出(FILO),队列是先进先出(FIFO),队列的示意图如下

    其基本操作的代码如下

    #include<iostream>
    #include<cstdlib>
    using namespace std;
    struct QNode{
    	int data;
    	QNode *next;
    };
    typedef QNode *QueuePtr;
    
    struct LinkQueue{
    	QueuePtr front;
    	QueuePtr rear;
    };
    
    //初始化队列
    bool InitQueue(LinkQueue &Q){
    	Q.front=Q.rear=new QNode;
    	if(!Q.front){
    		cout<<"初始化失败"<<endl;
    		return false;
    	}
    	Q.front->next=NULL;
    	cout<<"初始化成功"<<endl;
    	return true;
    }
    
     //销毁队列
     void DestroyQueue(LinkQueue &Q){
     	while(Q.front){
     		Q.rear=Q.front->next;
     		delete (Q.front);
     		Q.front=Q.rear;
     	}
     	cout<<"队列已被销毁"<<endl;
     }
    
    //判断是否为空
    bool EmptyQueue(LinkQueue Q){
    	if(Q.front==Q.rear){
            cout<<"队列为空"<<endl;
    		return true;
    	}
    	cout<<"队列不为空"<<endl;
    	return false;
    }
    
    //入队
    void EnQueue(LinkQueue &Q,int value){
    	QueuePtr p=new QNode;
    	p->data=value;
    	p->next=NULL;
    	Q.rear->next=p;
    	Q.rear=p;
    	cout<<value<<" 已经入队"<<endl;
    }
    
     //出队(一)
     void DeQueue(LinkQueue &Q,int &value){
     	if(Q.front==Q.rear){
     		cout<<"队列为空"<<endl;
     		return;
     	}
     	QueuePtr p=Q.front->next;
     	//vlaue保存被删的结点数据
     	value=p->data;
     	Q.front->next=p->next;
     	if(Q.rear==p){//如果p指向的是尾结点
            Q.rear=Q.front;
     	}
     	delete p;
     	cout<<value<<" 已经出队"<<endl;
     }
    
    //出队(二)
    void DeQueue2(LinkQueue &Q,int &value){
        if(Q.front==Q.rear){
     		cout<<"队列为空"<<endl;
     		return;
     	}
     	QueuePtr p=Q.front;
     	Q.front=Q.front->next;
     	value=p->data;
     	delete p;
     	cout<<value<<" 已经出队"<<endl;
    }
    
    //队列元素个数
    void GetLength(LinkQueue Q,int &length){
        length=0;
        QueuePtr p=Q.front;
        while(p!=Q.rear){
            p=p->next;
            length++;
        }
        cout<<"队列元素个数"<<length<<"个"<<endl;
    }
    
    //显示队列元素
    void VisitQueue(LinkQueue Q){
        if(Q.front==Q.rear){
            cout<<"队列为空"<<endl;
     		return;
        }
        QueuePtr p=Q.front;
        while(p!=Q.rear){
            p=p->next;
            cout<<p->data<<" ";
        }
        cout<<endl;
    }
    
    void show(){
        cout<<"+----------------------------------+"<<endl;
        cout<<"|                                  |"<<endl;
        cout<<"|        1->初始化队列             |"<<endl;
        cout<<"|        2->判断队列是否为空       |"<<endl;
        cout<<"|        3->入队                   |"<<endl;
        cout<<"|        4->出队                   |"<<endl;
        cout<<"|        5->显示队列元素           |"<<endl;
        cout<<"|        6->销毁队列               |"<<endl;
        cout<<"|        7->队列元素个数           |"<<endl;
        cout<<"|                                  |"<<endl;
        cout<<"+----------------------------------+"<<endl;
    }
    
    int main(){
    	LinkQueue Q;
    	int action,value,length;
    	show();
        while(cin>>action){
            switch(action){
                case 1:
                    system("cls");
                    InitQueue(Q);
                    break;
                case 2:
                    system("cls");
                    EmptyQueue(Q);
                    break;
                case 3:
                    system("cls");
                    cout<<"请输入入队的元素"<<endl;
                    cin>>value;
                    EnQueue(Q,value);
                    break;
                case 4:
                    system("cls");
                    DeQueue(Q,value);
                    break;
                case 5:
                    system("cls");
                    VisitQueue(Q);
                    break;
                case 6:
                    system("cls");
                    DestroyQueue(Q);
                    break;
                case 7:
                    system("cls");
                    GetLength(Q,length);
            }
            system("pause");
            system("cls");
            show();
        }
    }
    

    一定要注意LinkQueue,QueuePtr,QNode之间的关系,代码中有的地方是结构体的"."(访问),有的地方是"->"访问,顺序要搞清楚,不然会错一片的!

  • 相关阅读:
    Brain network involved in autonomic functions 与自主功能相关的大脑网络
    Brief summary of classical components of ERP 事件相关成分(ERP)经典成分小结
    ICA & Percentage Variance Account For (PVAF)
    数据处理中白化Whitening的作用图解分析
    Loadings vs eigenvectors in PCA 主成分分析(PCA)中的负荷和特征向量
    主成分分析(PCA)和独立成分分析(ICA)相关资料
    Sketch of heart and QRS complex 心脏及QRS波群简图
    Brain Network visulation in EEG 脑电网络可视化
    Phase Locking Value (PLV) 神经信号的锁相值
    ubuntu16.04下的一些基本操作笔记
  • 原文地址:https://www.cnblogs.com/-beyond/p/6113166.html
Copyright © 2011-2022 走看看