c++ 链表实现队列

//因作者刚接触c++因此写的代码较为简单,见谅。若有错误之处,希望各位大牛能指点一二。
//Geeksun 2018.03.18
//main.cpp
#include <iostream>
#include "queue.h"
using namespace std;
void menu();
int main()
{
    int choice,value = 0;
    queue myqueue;
    menu();
    while(1)
    {
        cout << "请输入:";
        cin >> choice;
        if(choice == 1)
        {
            int num;
            cout << "请输入即将入队的数字:";
            cin >> num;
            myqueue.push(num);
        }
        else if(choice == 2)
        {
            if (myqueue.pop(&value))
            {

            }
            else
            {
                cout << "队列为空" << endl;
            }
        }
        else if(choice == 3)
        {
            if(myqueue.top(&value))
            {
                cout << "队首为:" << value << endl;
            }
            else
            {
                cout << "队列为空" << endl;
            }
        }
        else if(choice == 4)
        {
            if(myqueue.empty())
            {
                cout << "队列不为空" << endl;
            }
            else
            {
                cout << "队列为空" << endl;
            }
        }
        else if(choice == 5)
        {
            myqueue.output();
        }
        else if(choice == 6)
        {
            cout << myqueue.size() << endl;
        }
        else if(choice == 7)
        {
            cout << "正在销毁队列..." << endl;
        }
        else
        {
            cout << "输入错误,请重新处输入!" << endl;
        }
    }


    return 0;
}
void menu()
{
    cout << "如果你想使一个元素入队,请输入数字1并按回车键。" << endl;
    cout << "如果你想使一个元素出队,请输入数字2并按回车键。" << endl;
    cout << "如果你想查询队首的元素,请输入数字3并按回车键。" << endl;
    cout << "如果你想查询队列是否为空,请输入数字4并按回车键。" << endl;
    cout << "如果你想打印队列,请输入数字5并按回车键" << endl;
    cout << "如果你想知道队列的元素个数,请输入数字6并按回车键" << endl;
    cout << "如果你想销毁队列,请输入数字7并按回车键" << endl;

}
****************************************************************************************************************************
//queue.h
#ifndef LINKEDQUEUE_H
#define LINKEDQUEUE_H

class queue
{
public:
	queue(void);//头指针
	queue(int value);//新建结点
	~queue(void);
private:
	int m_value;
	queue* m_pnext;
public:
	void push(int value);
	bool pop(int *value);
	bool top(int *value);
	bool empty();
	int size();
	void output();
	void destroy();
};
#endif
****************************************************************************************************************************
//queue.h
#include <iostream>
#include "queue.h"
using namespace std;

queue::queue(void)//头指针
{
    m_pnext = NULL;
    m_value = 0;
}
queue::queue(int value)//新建结点
{
    m_value = value;
    m_pnext = NULL;
}
queue::~queue(void)
{
    cout << "当前析构的数为:" << m_value << endl;
}
void queue::push(int value)
{
    queue* pnode = this;
    while(pnode->m_pnext != NULL)
    {
        pnode = pnode->m_pnext;
    }
    queue* newnode = new queue(value);
    pnode->m_pnext = newnode;
    m_value++;
}
bool queue::pop(int *value)
{
    bool result = false;
    if(m_pnext != NULL)
    {
        queue* p = m_pnext;
        *value = m_pnext->m_value;
        m_pnext = m_pnext->m_pnext;
        delete p;
        result = true;
        m_value--;
    }
    return result;
}
bool queue::top(int *value)
{
    bool result = false;
    if(m_pnext != NULL)
    {
        *value = m_pnext->m_value;
        result = true;
    }
    return result;
}
bool queue::empty()
{
    bool result = false;
    if(m_pnext != NULL)
    {
        result = true;
    }
    return result;
}
int queue::size()
{
    return m_value;
}
void queue::output()
{
    queue* p = m_pnext;
    while(p != NULL)
    {
        cout << p->m_value << " ";
        p = p->m_pnext;
    }
    cout << endl;
}
void queue::destroy()
{
    while(m_pnext != NULL)
    {
        queue* p = m_pnext;
        m_pnext =  m_pnext->m_pnext;
        delete p;
    }
}


猜你喜欢

转载自blog.csdn.net/geek_sun/article/details/79648176
今日推荐