棧與佇列 小總結

2021-10-21 16:40:45 字數 2686 閱讀 3671

棧與佇列都是基於順序表和煉表來實現.

棧:後進先出

佇列:先進先出

棧:

《入棧:把元素放到棧裡頭》

《出棧:把最後進來的元素給刪除掉》

《去棧頂元素:獲取到最後乙個進來的元素的結果》

(1)順序表:核心操作如下

//使用順序表來實現棧

public

class

mystack

data[size]

= val;

size++;}

//2.出棧,返回值就是被出棧了的那個元素

public integer pop()

//棧頂元素就是最後乙個元素.

int ret = data[size-1]

; size--

;return ret;

}//3.取棧頂元素

public integer peek()

return data[size-1]

;}}

(2)鍊錶:核心操作如下

//使用鍊錶來實現棧

class

node

}public

class

mystack2

newnode.next = head;

head = newnode;

}//2.出棧

public integer pop()

if(head.next == null)

int ret = head.val;

head = head.next;

return ret;

}//3.取棧頂元素

public integer peek()

return head.val;

}}

1.順序表中,是否可以用頭插操作表示入棧,頭刪操作表示出棧?

可以,效率低.

2.鍊錶中,是否可以用尾插操作表示入棧,尾插操作表示出棧?

可以,但需記錄額外的資訊,**也複雜.

佇列:

(1)陣列表示環形佇列:可以用特殊的方式來實現,設佇列的有效區間[head,tail),操作如下

//使用陣列來實現環形佇列

public

class

myqueue2

//把新元素放到tail對應的下標上.

data[tail]

= val;

//同時需要tail++.

tail++

;//tail到達陣列末尾,就需要讓tail從頭開始.

if(tail = data.length)

//以上**還可以寫作tail = tail % data.length;

//更新size的值.

size++

;return

true;}

//2.出佇列

public integer poll()

int ret = data[head]

;//更新head的位置.

head++;if

(head == data.length)

size--

;return ret;

}//3.取隊首元素

public integer peek()

return data[head];}

}

此處涉及到環形佇列,無論環形隊列為空還是滿,此時head和tail都是重合的.

當環形佇列head和tail都是重合的,如何區分環形隊列為空還是滿?

方法1:浪費乙個環形佇列的空間,用head和tail重合表示空佇列,用tail=head-1表示滿佇列.

方法2:不浪費環形佇列的空間,用乙個size變數記錄佇列的元素個數,size為0表示空佇列,size為陣列長度就是滿佇列.

(2)鍊錶:核心操作如下

//使用鍊錶實現佇列

public

class

myqueue

}//建立乙個鍊錶的頭結點

//為了方便的進行尾插,也記錄尾結點

private node head = null;

private node tail = null;

//佇列的核心操作

//1.入佇列,返回值表示插入成功/失敗(也是為了和標準庫的佇列的offer介面對齊)

public

boolean

offer

(int val)

tail.next = newnode;

tail = tail.next;

return

true;}

//2.出佇列

public integer poll()

int ret = head.val;

if(head.next == null)

head = head.next;

return ret;

}//3.取隊首元素

public integer peek()

return head.val;

}}

棧與佇列操作總結

c 有棧和佇列的函式 include include queue int q 定義int型別為例 stack int s stack 堆疊 是乙個容器類的改編,提供了堆疊的全部功能,也就是說實現了乙個先進後出 filo 的資料結構。操作比較和分配堆疊 empty 堆疊為空則返回真 pop 移除棧頂元...

總結學習棧與佇列

棧和佇列都是特殊的線性表,對線性表的插入與刪除操作位置進行了限定。棧是一種先進後出的資料結構,只能在棧頂進行插入與刪除 佇列是一種先進先出的資料結構,只能在隊尾查入隊頭刪除。與線性表一樣,棧和佇列都可以分別用順序儲存和鏈式儲存的形式實現。1.棧的順序儲存結構實現 設定空棧標誌為棧頂指標top 1,入...

棧與佇列操作總結

c 有棧和佇列的函式 include include queue int q 定義int型別為例 stack int s stack 堆疊 是乙個容器類的改編,提供了堆疊的全部功能,也就是說實現了乙個先進後出 filo 的資料結構。操作比較和分配堆疊 empty 堆疊為空則返回真 pop 移除棧頂元...