队列的C++结构体实现

#include <iostream>
#include <cstring>
using namespace std;
typedef struct node{
    int age;
    string name;
    struct node * next;
}student;
typedef struct node2{
    int size;
    student * front;
    student * tail;
}queue;
//初始化队列 
queue* InitQueue(){
    queue * myqueue=new queue;
    myqueue->size=0;
    myqueue->front=NULL;
    myqueue->tail=NULL;
    return myqueue;
}
//入队  从队尾入
void pushQueue(queue * myqueue,int age,string name){
    student * p=new student;
    p->age=age;
    p->name=name;
    p->next=NULL;
    
    if(myqueue->size==0){
        //说明当前队列为空,新元素入队后时队里的第一个结点
        //此时队头队尾都是同一个人,也就是都是新结点的地址
        myqueue->front=p;
        myqueue->tail=p;      
    }
    else{
        //不是第一个结点
        myqueue->tail->next=p;
        //原来的队尾元素的next区域里面放新结点的地址 
        myqueue->tail=p; 
        //然后把队尾元素变成新结点 
    }
    myqueue->size++;//只要入队了,队里的元素就会增加 
} 

//出队操作
void popQueue(queue* myqueue){
    if (myqueue->size==0){
        cout<<"当前队列为空,无法执行出队操作"<<endl; 
    }
    else{
        //先把要出队的队头元素地址保存起来
        //然后新的队头地址是在当前这个队头元素的next区域里的 
        student * q=myqueue->front;
        myqueue->front=q->next;
        delete q;
        myqueue->size--;
    }
} 
void printQueue(queue * myqueue){
    if(myqueue->size==0){
        cout<<"当前队列为空,无法遍历"<<endl;
    }
    else{
        cout<<"----------------------------"<<endl;
        cout<<"开始遍历队列"<<"队头元素地址为"<<myqueue->front<<endl;
        cout<<"队尾元素地址为"<<myqueue->tail<<endl;
        student * curNode=myqueue->front; 
        //不能用队头指针和队尾指针去遍历,所以自己建一个指针用来遍历 
        while(curNode!=NULL){
            cout<<curNode->age<<curNode->name<<"结点地址为"<<curNode<<endl;
            curNode=curNode->next;
        }
        cout<<"结束遍历队列"<<"队头元素地址为"<<myqueue->front<<endl;
        cout<<"队尾元素地址为"<<myqueue->tail<<endl;
    }
}
int main(){
    queue* myqueue=InitQueue();
    pushQueue(myqueue,1,"AAAAA");
    pushQueue(myqueue,2,"BBBBB");
    pushQueue(myqueue,3,"CCCCC");
    pushQueue(myqueue,4,"DDDDD");
    pushQueue(myqueue,5,"EEEEE");
    printQueue(myqueue);
    
    popQueue(myqueue);
    printQueue(myqueue);
}

 

posted @ 2022-03-24 15:51  今天也是开心的一天呀  阅读(338)  评论(0)    收藏  举报