數據結構基礎(二)隊列的實現

使用鏈表實現的隊列:

typedef struct queueNode
{
	int val;
	queueNode* next;
}Node;
class queue
{
public:
	queue()
	{
		front=NULL;
		back=NULL;
	};
	bool empty()
	{
		if (front==NULL||back==NULL)
		{
			return true;
		}
		return false;
	};
	void push(int data)
	{//在鏈表尾巴上插入 從尾巴入隊
		if (empty())
		{
			front=new Node;
			front->val=data;
			back=front;
			back->next=NULL;
			return ;
		}
		back->next=new Node;
		back=back->next;
		back->val=data;
		back->next=NULL;
		return ;
	};
	bool pop(int& data)
	{  //從將尾巴的移到前一個
		if (empty())
		{
			return false;
		}
		if (back==front)
		{
			data=front->val;
			delete front;
			back=NULL;
			front=NULL;
			return true;
		}
		data=front->val;
		Node* temp=front;
		Node* pre=NULL;
		while (temp->next!=NULL)
		{
			pre=temp;
			temp->val=temp->next->val;
			temp=temp->next;
		}	
		//temp代表尾節點
		//delete temp 並且上個節點的next要設爲NULL
			delete temp;
			pre->next=NULL;
			back=pre;
			return true;	
	};
	void print()
	{	
		if (empty())
		{
			return;
		}

		Node *temp=front;
		while(temp->next!=NULL)
		{
			cout<<temp->val<<"\t";
			temp=temp->next;
		}
		cout<<temp->val<<"\t";
	};
	void clear()
	{
// 		//釋放鏈表內存
// 		if (empty())
// 		{
// 			return;
// 		}
// 
// 		Node *temp=front;
// 		Node *pre=NULL;
// 		while(temp->next!=NULL)
// 		{
// 			pre=temp;
// 			temp=temp->next;
// 			delete pre;
// 		}
// 		delete temp;
// 		temp=NULL;
// 		front=back=NULL;

		int temp;
		while(!empty())
		{
			pop(temp);
		}
	};
private:
	Node *front;
	Node *back;

};

發佈了77 篇原創文章 · 獲贊 11 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章