順序棧 鏈棧 順序佇列 鏈佇列區別

2021-07-11 02:16:58 字數 1970 閱讀 9920

順序棧的主要特徵是用乙個陣列實現棧的儲存,top指標確定棧頂元素位置

定義形式如下:

#define max 100

template class seqstack

void push(t x);

t gettop();

t pop();

bool isempty();

bool isfull();

int getsize();

private:

t a[max];

int top;

}

2.鏈棧

鏈棧的特點是在主體鏈棧類外定義乙個結構體,來實現結點的儲存,在類中定義top指標,指向node頭結點。

定義形式如下:

template struct node;

template class linkedstack

int getsize()const;

void makeempty();

private:

node*top; //棧頂指標

};

3.順序佇列

佇列基於陣列的儲存表示稱為順序佇列,front指向隊首,隊首刪除元素,rear隊尾,隊尾新增元素。

但是單純的陣列表示,可能會造成浪費空間。

為了充分利用儲存空間,將陣列的前端front和後端rear連線起來,形成乙個環形的表,稱為迴圈佇列。

迴圈佇列定義特徵是:

(1)利用陣列實現儲存。

(2)有兩個整數值作為指標功能,front指向隊首元素,rear指向隊尾元素的下一位,注意不是隊尾元素。

實際上front、rear即為陣列第乙個元素和最後乙個元素下一位的下標。

(3)由於是迴圈佇列,每次刪除,或者新增元素,或者判斷佇列是否滿的時候,注意判別式的寫法

①刪除元素:front=(front+1)%max;

②新增元素:rear=x;rear=(rear+1)%max;

③判斷佇列是否滿:if((rear+1)%max==front)  棧滿

④判斷佇列是否為空:if(rear==front) 棧空

⑤得到佇列長度:length=(rear-front+max)%max

⑥得到隊尾元素:注意不是data[rear]    而是data[rear-1]

迴圈佇列的定義形式如下:

template class seqqueue

void makeempty();

bool enqueue(t x);

bool dequeue(t &x);

t getfront();

bool isempty();

bool isfull();

int getsize();

t getrear();

private:

t data[max];

int front_;

int rear;

};

4.鏈佇列

鏈佇列不是用陣列實現儲存功能,而是定義乙個結構體來表示結點,故不存在浪費空間,也不用考慮迴圈的問題

template struct node;

template class linkedqueue

t getfront();

t getrear();

void enqueue(t x);

void dequeue();

bool isempty();

int getsize();

private:

node*front_,*rear;

};

下幾篇將給出具體的建立順序棧、鏈棧、順序佇列(迴圈佇列)、鏈佇列的**

順序棧,鏈棧

二,鏈棧 public inte ce istack public class seqstack implements istack 將棧置空 public void clear 判斷棧是否為空 public boolean isempty 返回棧中元素的個數 public intlength 返回...

順序棧 鏈棧已及佇列的實現

include define stack init size 100 define stackincrement 10 define queue init size 100 define maxsize 100 typedef int selemtype typedef int qelemtype ...

棧,順序棧,鏈棧

棧作為一種限定性線性表,是將表的插入刪除限制為僅在表的一端進行,通常將表中允許插入刪除的一端叫做棧頂 top 因此棧頂的當前位置是動態變化的。棧的另一端叫做棧底 bottom 當棧中沒有元素時稱為空棧。插入操作稱為進棧或入棧,刪除操作稱為出棧或退棧。棧是先進後出的線性表,簡稱為lifo表。棧主要有兩...