一、棧的實現(入棧、出棧、取棧頂元素)
順序表實現棧操作:
**實現:
public
class
mystack
data[size]
= val;
size++;}
//2.出棧
public integer pop()
integer result = data[size -1]
; size--
;return result;
}//3.取棧頂元素
public integer peek()
return data[size -1]
;}}
鍊錶實現棧操作:
**實現:
class
listnode
}//用鍊錶實現棧
public
class
mystackbylinkedlist
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;
}}
二、佇列的實現(入佇列、出佇列、取隊首元素)
順序表實現佇列操作:利用環形佇列實現
環形隊列為空時,head 和 tail 重合,環形隊列為滿時,head 和 tail 也重合。如何區分環形佇列的空與滿呢?有以下兩種解決方法:
方法1:通過浪費乙個空間來解決。head 和 tail 重合,則為空佇列;tail = head - 1,則為滿佇列。**實現:(以下**實現採用方法2)方法2:用 size 記錄佇列中元素個數。size == 0,則為空佇列;size == 陣列長度,則為滿佇列。
public
class
myqueuebyarraylist
//將新元素放到tail下標上
data[tail]
= val;
tail++
;//tail到達陣列末尾後,置tail = 0;
if(tail == data.length)
size++
;return
true;}
//2.出佇列
public integer poll()
int ret = data[head]
; head++;if
(head == data.length)
size--
;return ret;
}//3.取隊首元素
public integer peek()
return data[head];}
}
鍊錶實現佇列操作:
**實現:
class
node
}public
class
myqueuebylinkedlist
tail.next = newnode;
tail = tail.next;
return
true;}
//2.出佇列(頭刪)
public integer poll()
if(head.next == null)
integer ret = head.val;
head = head.next;
return ret;
}//3.取隊首元素
public integer peek()
return head.val;
}}
佇列實現棧棧實現佇列
佇列是一種先進先出的資料結構,要想實現先進後出,需加乙個輔助佇列進行資料的來回倒 引用交換 從而實現棧結構。例如 5 4 3 2 1 用乙個輔助佇列裝 4 3 2 1,把5彈出,在把 4 3 2 1放回原佇列,如此反覆可變成5 4 3 2 1的棧結構。棧是一種先進後出的資料結構,要想實現先進先出,同...
佇列實現棧,棧實現佇列
兩個佇列實現棧 每次進入乙個佇列,取出得時候,把所有元素進入另乙個佇列,只留下乙個元素,以此實現棧的先進後出 filo package algorithmbymyself import j a.util.linkedlist import j a.util.queue 用兩個佇列實現乙個棧 publ...
用棧實現佇列 棧和佇列學習
正如標題所述,你需要使用兩個棧來實現佇列的一些操作。佇列應支援push element pop 和 top 其中pop是彈出佇列中的第乙個 最前面的 元素。pop和top方法都應該返回第乙個元素的值。棧是先進後出,佇列是先進先出。第一想法是用棧一接收push的數。每次pop和top的時候,把棧一的數...