1. 程式人生 > >數據結構和算法學習總結03 線性表---隊列

數據結構和算法學習總結03 線性表---隊列

基本操作 tro using mes nod sin ont cin code

隊列

隊列(Queue)是限定只能在表的一端進行插入和在另一端進行刪除操作的線性表。

與棧的比較:

1.隊列先進先出,棧先進後出

2.從"數據結構"的角度看,它們都是線性結構,即數據元素之間的關系相同。

但它們是完全不同的數據類型。除了它們各自的基本操作集不同外,主要區別是對插入和刪除操作的"限定"

棧是限定只能在表的一端進行插入和刪除操作的線性表;隊列是限定只能在表的一端進行插入和在另一端進行刪除操作的線性表。

隊列同樣分為順序隊列和鏈式隊列,我們一般用鏈式隊列:

#include <iostream>  
using namespace std;  

struct Node  
{  
    
int data; struct Node *next; }; class Queue { public: Queue( ) //構造函數,初始化一個空的鏈隊列 { Node *s; s=new Node; s->next=NULL; front=rear=s; } ~Queue( ) //析構函數,釋放鏈隊列中各結點的存儲空間 { while(front) { Node
*p; p=front->next; delete front; front=p;} } void EnQueue(int v); //將元素x入隊 int DeQueue(); //將隊頭元素出隊 int GetQueue(); //取鏈隊列的隊頭元素 bool IsEmpty( ); //判斷鏈隊列是否為空 void Intput(int n); void Output(); private: Node
*front, *rear; //隊頭和隊尾指針,分別指向頭結點和終端結點 }; void Queue::EnQueue(int v) { Node *s; s=new Node; s->data=v; //申請一個數據域為x的結點s s->next=NULL; rear->next=s; //將結點s插入到隊尾 rear=s; } int Queue::DeQueue() { Node *p; int x; if (rear==front) cout<<"Null"<<endl; p=front->next; x=p->data; //暫存隊頭元素 front->next=p->next; //將隊頭元素所在結點摘鏈 if (p->next==NULL) rear=front; //判斷出隊前隊列長度是否為1 delete p; return x; } int Queue::GetQueue() { if (front!=rear) return front->next->data; } bool Queue::IsEmpty( ) { if(front==rear) return 1; else return 0; } void Queue::Intput(int n) { int v; for(int i =0; i<n; i++) { cout<<"請輸入元素的值:"<<endl; cin>>v; EnQueue(v); } } void Queue::Output() { Node *p; p = front; while(p!=rear) { p=p->next; cout<<p->data<<" "; } cout<<endl; } int main() { Queue l; cout<<l.IsEmpty()<<endl; l.Intput(5); cout<<l.IsEmpty()<<endl; l.Output(); l.EnQueue(6); l.DeQueue(); l.Output(); }

數據結構和算法學習總結03 線性表---隊列