(10.19)C++实现链队列的基础操作

注:像书中一样,用到了头结点,作用就是像所有的单链表一样: 插入删除首元素时不用对其进行特殊处理。  
还需要稍稍注意的东西就是要注意一下空间的分配,和队列为空的情况的处理。都不算难。

空队列:就是头指针和尾指针指向同一个空间。
插入元素,从队尾进,处理一下队尾,然后,若队列为空,注意进入第一个元素时的情况就ok,都很简单。
删除元素:就从队头删除,由于加入了头结点,所以比较方便对于队头的处理。


(10.19)C++实现链队列的基础操作

queue.h
#include<iostream>
using namespace std;

struct list
{
    int data;   //队列中数据
    list * next;   //表结构体中的链表,用于指向下一个元素
};

class queue
{
private :
    list * front;
    list * rear;
public :
    queue()
    {
        front = rear = new list;   //初始化,一定要注意分配空间,队列为空,注意头结点和头指针的区别
        front -> next = NULL;
    }
    void enqueue( int elem);     //插入元素为elem 的队尾远么
    int   dequeue();                     //删除队头元素,并返回其值
    void traverse();                   //遍历队列中的元素
};


queue.cpp

#include "queue.h"

void queue :: enqueue( int elem)
{
    list * newlist = new list;
    newlist -> data = elem;
    newlist -> next = NULL;
    if( front == rear) //说明是空队列
    {
        front -> next = newlist;
        rear = newlist;
    }
    else
    {
        rear -> next = newlist;
        rear = newlist;
    }
}

int queue :: dequeue()   //从队头出去
{
    int elem; //用于记录出队列的元素
    list * temp = new list;   //用于临时存储要出队列队头
    if( front == rear) return - 1;
    else
    {
        temp = front -> next;
        elem = temp -> data;
        front -> next = temp -> next;
    }
    delete temp;
    return elem;
}

void queue :: traverse()         //遍历整个队列
{
    list * temp;
    cout << "从队头到队尾的元素分别为:" << endl;
    for( temp = front -> next; temp -> next != NULL; temp = temp -> next)
    {
        cout << temp -> data << " ";
    }
    cout << rear -> data << endl;
}

main.cpp

#include"queue.h"

int main()
{
    queue q;
    q . enqueue( 1);
    q . enqueue( 3);
    q . traverse();
    cout << "删除的元素为:" << endl;
    cout << q . dequeue() << endl;;
    q . traverse();
}

你可能感兴趣的:((10.19)C++实现链队列的基础操作)