用鍊錶實現佇列和棧

2021-10-21 21:05:10 字數 2213 閱讀 5149

1.定義佇列介面

public

inte***ce

myqueue

2.設計介面的實現類

首先佇列是乙個容器,要設定容器的各種方法,我們需要一些原料,這裡我選擇兩個節點和乙個表示容器大小的n,頭節點first用於獲取佇列頭部元素,last指向佇列尾部,同時也作為乙個游標,來迴圈訪問佇列各個元素。

關於方法,主要是offer方法和poll方法的實現,對於offer方法,隊列為空時,直接將頭和尾指向新節點,不為空時,我們將當前節點指向新節點,並且游標後移,每次判斷完後,容量n加一。對於poll方法,也要先進行判空操作,如果為空,返回-1,如果不為空,我們從頭部獲取要彈出元素,first後移,並且容量減一,完成出隊操作。

public

class

listqueue

implements

myqueue

}private node first;

private node last;

private

int n=0;

@override

public

intsize()

@override

public

boolean

isempty()

@override

public

void

offer

(integer value)

else

n++;}

@override

public

intpoll()

int value=first.val;

first=first.next;

n--;return value;

}@override

public

intpeek()

return first.val;

}}

3.驗證設計的正確性

public

static

void

main

(string[

] args)

最終列印的結果:

1.定義棧的介面

public

inte***ce

mystack

2.設計介面的實現類

同樣先準備一些原料,包括乙個節點top,和乙個表示棧容量大小的n,top節點總是指向棧頂元素。

然後設計push和pop方法,對於push方法,我們利用鍊錶的頭插法,每乙個新進來的節點都指向當前的top,然後再把top以到新節點的位置,同時容量n加一。對於pop方法,同樣是先判空,如果為空,就返回-1,不為空,就記錄當前棧頂元素值,彈出,並且將top後移,容量減一。

public

class

liststack

implements

mystack

}private node top;

private

int n=0;

@override

public

intsize()

@override

public

boolean

isempty()

@override

public

void

push

(integer value)

@override

public

intpop()

int value=top.val;

top=top.next;

n--;return value;

}@override

public

intpeek()

return top.val;

}}

3.驗證設計的正確性

public

class

main

}

最終列印的結果:

鍊錶棧和佇列的實現

include nodes.h 鍊錶棧 帶頭指標,頭指標的值表示棧的深度 鍊錶棧 帶頭指標,頭指標的值表示棧的深度 snode createstack 入棧 void stack push snode shead,snode value 出棧 snode stack pop snode shead ...

用鍊錶實現棧

基於介面實現 public inte ce stack引用到上次已經實現的鍊錶 linkedlistlist new linkedlist 1 獲取棧的長度 獲取棧的長度 return public int getsize 2 判斷棧是否為空 判斷棧是否為空 return public boolea...

用陣列和鍊錶實現棧

完成乙個棧總共需要完成以下操作 初始化入棧 出棧檢視棧頂元素 檢視棧的容量 清空棧。首先是簡單的,用陣列做的,會有越界的可能。include include typedef struct stack stack stack s 生成棧 void initstack 入棧,push void push...