zoukankan      html  css  js  c++  java
  • 【数据结构】2-2 队列问题

    就是简单的队列的实现,出队、入队等操作

    #include<iostream>
    using namespace std;
    template<class T>
    struct Node {
        T data;
        Node *next;
    };
    template<class T>
    class LinkQueue {
    private:
        Node<T> *front, *rear;
    public:
        LinkQueue();
        ~LinkQueue();
        void EnQueue(T x);        //将元素x入队
        T DeQueue();            //将队头元素出队
        T GetQueue();            //取队头元素
        bool Empty();            //判断链队列是否为空
        void print();            //打印队列
    };
    template<class T>
    LinkQueue<T>::LinkQueue()
    {
        Node<T> *s = new Node<T>();
        s->next = NULL;
        front = rear = s;
    }
    template<class T>
    void LinkQueue<T>::EnQueue(T x)
    {
        Node<T> *s = new Node<T>();
        s->data = x;
        s->next = NULL;
        rear->next = s;
        rear = s;
    }
    template<class T>
    T LinkQueue<T>::DeQueue()
    {
        T tem;                //存储数据        
        Node<T> *del;            //用来存放要删除的指针的地址
        if (front == NULL)
        {
            cout << "ERROR" << endl;
            exit(1);
        }
        tem = front->next->data;
        del = front->next;
        front->next = front->next->next;
        if (front->next == NULL)
        {
            rear = front;
        }
        delete del;
        return tem;
    }
    template<class T>
    T LinkQueue<T>::GetQueue()
    {
        if (front == NULL)
        {
            cout << "ERROR" << endl;
            exit(1);
        }
        T tem;
        tem = front->next->data;
        return tem;
    
    }
    template<class T>
    bool LinkQueue<T>::Empty()
    {
        if (front == NULL)
            return true;
        else
            return false;
    }
    template<class T>
    LinkQueue<T>::~LinkQueue()
    {
        Node<T> *p = front;
        while (p)
        {
            Node<T> *q = p;
            p = p->next;
            delete q;
        }
        front = rear = NULL;
    }
    template<class T>
    void LinkQueue<T>::print()
    {
        Node<T> *p = front->next;
        while (p)
        {
            cout << p->data << " ";
            p = p->next;
        }
        cout << endl;
    
    }

    测试代码:

    #include"queue.cpp"
    int main()
    {
        LinkQueue<int> test;
        int number;
        cout << "请输入队中元素个数并分别赋值:" << endl;
        cin >> number;
        for (int i = 0; i < number; i++)
        {
            int x;
            cin >> x;
            test.EnQueue(x);
        }
        cout << "取队头元素:" << test.GetQueue() << endl;
        cout << "打印队列:";
        test.print();
        cout << "队头:" << test.DeQueue() << "出队" << endl;
        test.print();
        system("pause");
        return 0;
    }
  • 相关阅读:
    UVA
    shell 之for循环几种写法
    关于用户的一些操作(useradd与adduser的区别)
    shell 大小关系 -eq -ne
    shell之seq
    脚本函数写法
    Springboot将数据存储到数据库当中
    后端传输数据到前端
    前端传输数据到后端
    JS onFocus和onBlur
  • 原文地址:https://www.cnblogs.com/robotpaul/p/9978087.html
Copyright © 2011-2022 走看看