棧和佇列 簡單實現

2021-10-21 17:34:27 字數 2316 閱讀 3772

棧:是一種特殊的線性表,只允許在固定的一端插入和刪除,一端稱為棧底,一端稱為棧頂。棧遵循先進後出的原則。

棧的相關操作:壓棧,向棧頂插入乙個元素

出棧,在棧頂處刪除乙個元素

取棧頂元素,獲取到在最後乙個在棧頂元素的結果。

棧的實現:

1.基於順序表:

使用尾插,尾刪來分別表示入棧和出棧。根據下標獲取元素表示取棧頂元素

實現**:

public

class

mystack

//出棧

public integer pop()

int ret=arr[size-1]

; size--

;return ret;

}//取棧頂元素

public integer peek()

int ret=arr[size-1]

;return ret;

}}

2.基於鍊錶

使用頭插,頭刪來表示入棧和出棧。直接取頭結點就是取棧頂元素。

實現**

class

node

}public

class

mylinkedstack

//棧不為空

newnode.next=head;

head=newnode;

}//出棧

public integer pop()

if(head.next==null)

int ret=head.val;

head=head.next;

return ret;

}//取棧頂元素

public integer peek()

return head.val;

}}

佇列:只允許在一端進行插入,在另一端進行刪除操作的特殊線性表。佇列遵循先進先出的原則。

佇列的操作:入佇列:在隊尾進行插入操作

出佇列:在隊頭進行刪除操作

佇列的實現:

通過鍊錶:

使用尾插表示入佇列,使用頭刪表示出佇列。直接獲取到頭結點,就是取隊頭元素。

實現**:

class

node

}public

class

myqueue

//不為空

tail.next=newnode;

tail=tail.next;

return

true;}

//出佇列

public integer poll()

int ret = head.val;

if(head.next == null)

head=head.next;

return ret;

}//取隊頭元素

public integer peek()

return head.val;

}}

基於順序表實現迴圈佇列:

佇列的有效元素區間:[head,tail)

迴圈佇列和普通佇列的區別,只是隊頭隊尾可以重新從0開始往後移動。相比於鍊錶版的佇列,操作速度更快,但空間是固定大小的,擴容成本高。

入佇列操作:把新的元素放到tail對應的下標上,同時tail++

出佇列操作:head++ ,相當於把原來head指向的元素排除到有效區間外。

缺陷:隊列為空時,tail和head是重合的。隊列為滿時,tail和head也是重合的,所以無法正確判斷當前的佇列是空還是滿。

這個問題的解決方案:1.留出乙個元素大小的空間,這樣當隊列為滿時,tail和head不會重合,可以判斷為滿。tail==head-1即隊列為滿。

2.設定size屬性,通過操作size來判斷佇列是否空或滿。

public

class

myqueue2

data[tail]

=val;

tail++;if

(tail==data.length)

size++

;return

true;}

//出佇列

public integer poll()

int ret=data[head]

; head++;if

(head==data.length)

size--

;return ret;

}//取隊頭元素

public integer peek()

return data[head];}

}

實現棧和佇列

一 棧的實現 入棧 出棧 取棧頂元素 順序表實現棧操作 實現 public class mystack data size val size 2.出棧 public integer pop integer result data size 1 size return result 3.取棧頂元素 p...

c 棧,佇列,迴圈佇列 簡單實現

棧 include using namespace std template struct node template class stack bool push const t e const t pop const t gtop bool empty int size bool clear pr...

佇列實現棧棧實現佇列

佇列是一種先進先出的資料結構,要想實現先進後出,需加乙個輔助佇列進行資料的來回倒 引用交換 從而實現棧結構。例如 5 4 3 2 1 用乙個輔助佇列裝 4 3 2 1,把5彈出,在把 4 3 2 1放回原佇列,如此反覆可變成5 4 3 2 1的棧結構。棧是一種先進後出的資料結構,要想實現先進先出,同...