實現棧和佇列

2021-10-21 14:33:16 字數 2056 閱讀 6742

一、棧的實現(入棧、出棧、取棧頂元素)

順序表實現棧操作:

**實現:

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:用 size 記錄佇列中元素個數。size == 0,則為空佇列;size == 陣列長度,則為滿佇列。

**實現:(以下**實現採用方法2)

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的時候,把棧一的數...