棧與佇列都是基於順序表和煉表來實現.
棧:後進先出
佇列:先進先出
棧:
《入棧:把元素放到棧裡頭》(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都是重合的.(2)鍊錶:核心操作如下當環形佇列head和tail都是重合的,如何區分環形隊列為空還是滿?
方法1:浪費乙個環形佇列的空間,用head和tail重合表示空佇列,用tail=head-1表示滿佇列.
方法2:不浪費環形佇列的空間,用乙個size變數記錄佇列的元素個數,size為0表示空佇列,size為陣列長度就是滿佇列.
//使用鍊錶實現佇列
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 移除棧頂元...