數據結構——13 隊列鏈表描述

隊列——鏈表描述


隊列——入隊、出隊、打印(鏈表描述)
爲了方便出隊操作,建立隊列的時候,隊列的方向和隊列裏元素的方向連接相反

#include <iostream>
using namespace std;
struct node               //定義一個結構體,它是隊列裏的元素
{
  int x;
  node* next;
};

class queue
{
public:
	queue():size(0)       //構造函數初始化隊列裏元素的個數爲0,並new一個節點
	{
		front=rear=new node; 
	}    
	~queue();                           //析構函數刪除隊列
	int dequeue();                      //出隊
	void enqueue(int n);                //進對
private:
    node *front;                            //隊列頭指針
	node *rear;                         //隊列尾指針
    int size;                               //隊列裏元素的個數
};

queue::~queue()                           
{
  node *p=front;
  while(p!=NULL)
  {	  
	  front=front->next;      //從front刪除元素
	  delete [] p;                
	  p=front;
  }
}

void queue::enqueue(int n)        //入隊操作,增加一個元素放在隊尾
{
    node* temp=new node;          //定義一個臨時指針
	if(size==0)               //如果size=0,表示隊列沒有元素,但構造函數new了一個node節點,所以直接把它當作第一個節點,此時,front和rear都指向它
	{
		rear->x=n;
		rear->next=NULL;
//rear=temp;       //這裏不知道爲什麼這樣不行,直接把temp賦值給rear,可能rear->next出問題
	}
	else                      //size不爲0,往尾巴上續
	{
		temp->x=n;
		rear->next=temp;          
		temp->next=NULL;
		rear=temp;                 
	}
	size++;                   //棧裏元素個數加1
}

int queue::dequeue()              //出對操作,返回出隊元素值,並刪除該元素
{
    node* temp;                   //定義一個臨時node指針
    int out;                      //返回值
	if(size)                  //用size判斷是否棧裏還有元素
	{
		temp=front;                 
		front=temp->next;
		out=temp->x;
		delete []temp;           
        size--;
        return out;
	}
	else
	{
		cout<<"隊列已經爲空!"<<endl;
		exit(0);
	}
}


int main()
{
  queue que;
  cout<<"The enqueue of que are: ";
  for(int i=1;i<=20;i++)
  {
	  cout<<i<<"  ";
	  que.enqueue(i);
  }
  cout<<endl;


  cout<<"The dequeue of que are: ";
  for(i=1;i<=10;i++)
    cout<<que.dequeue()<<"  ";
	cout<<endl;
  return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章