用數組實現隊列(C++)


#include <iostream>

using namespace std;

template<typename T, int size = 0>
class Queue
{
public:
	Queue();

	bool isEmpty() const;
	bool isFull()const;

	void enQueue(const T&);
	T deQueue();

	void traverse()const;
private:
	T storge[size];
	int first;
	int last;
};

template<typename T, int size>
Queue<T, size>::Queue()
{
	first = last = -1;
}

template<typename T, int size>
bool Queue<T, size>::isEmpty()const
{
	//如果為空,first必然為-1,因為在deQueue()出棧函數中已經處理
	return first == -1;
}

template<typename T, int size>
bool Queue<T, size>::isFull()const
{
	//兩種情況,第一種是正常的滿,第二種是存在出隊時的滿
	return first == 0 && last == size - 1 || last == first - 1;
}


template<typename T, int size>
void Queue<T, size>::enQueue(const T& elem)
{
	if (!isFull())
	{
		//last為-1或指向最后一個元素的位置時
		if (last == -1 || last == size - 1)
		{
			storge[0] = elem;
			last = 0;
			//若隊列為空,還需將first賦為0
			if (first == -1)
			{
				first = 0;
			}
		}
		else
		{
			storge[++last] = elem;
		}
	}
	else
	{
		cout << "Queue full." << endl;
		exit(1);
	}
}

template<typename T, int size>
T Queue<T, size>::deQueue()
{
	if (isEmpty())
	{
		cout << "Queue empty." << endl;
		exit(1);
	}
	T temp;
	temp = storge[first];
	//隊列中只有一個元素時
	if (first == last)
	{
		//這樣,判斷是否為空時只需判定first是否為-1
		first = last = -1;
	}
	else if (first == size - 1)
	{
		//回到第一個元素位置
		first = 0;
	}
	else
	{
		++first;
	}
	return temp;
}

template<typename T, int size>
void Queue<T, size>::traverse()const
{
	for (auto i = first; i <= last; ++i)
	{
		cout << storge[i] << " ";
	}
	cout << endl;
}


int main()
{
	Queue<int, 3> queue;

	queue.enQueue(10);
	queue.enQueue(10);
	queue.enQueue(10);

	cout << queue.isFull() << endl;

	queue.traverse();
	queue.deQueue();
	queue.traverse();
	queue.deQueue();
	cout << queue.isEmpty() << endl;
	queue.deQueue();
	cout << queue.isEmpty() << endl;
	system("pause");
	return 0;
}

運行測試:

參考:C++實現隊列--數組實現和鏈表實現


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM