表 棧和佇列 Java的實現

2021-09-12 21:24:14 字數 3714 閱讀 5291

1.1 list介面繼承collection介面

public

inte***ce

list

extends

collection

list adt有兩種流行的實現方式

linkedlist 類提供了list adt 的雙鏈表實現

例子

將表中所有具有偶數值的項刪除

public

static

void

removeevensver

(list

list)

}}

如果傳遞乙個linkedlist效率高,對於乙個arraylist即使迭代器位於需要被刪除的節點上,由於其資料需要移動,其remove()方法是昂貴的。

1.2listiterator介面

listiterator是擴充套件了listiterator的功能。

1.3 arraylist 類的實現

public

class

myarraylist

implements

iterable

private

void

doclear()

public

intsize()

public

boolean

isempty()

public

void

trimtosize()

public e get

(int index)

return items[index];}

public e set

(int index, e newval)

e old = items[index]

; items[index]

= newval;

return old;

}private

void

ensurecapacity

(int newcapacity)

e[] old = items;

items =

(e)new

object

[newcapacity]

;for

(int i =

0; i <

size()

; i++)}

public

boolean

add(e x)

public

void

add(

int index, e x)

for(

int i = size; i > index; i--

) items[index]

= x;

size++;}

public e remove

(int index)

size--

;return removeitem;

}@override

public iterator

iterator()

private

class

arraylistiterator

implements

iterator

@override

public e next()

return items[current++];

}public

void

remove()

}}

ensurecapacity容量的擴充,先儲存原始陣列的乙個引用,再為新陣列分配記憶體,然後將舊內容拷貝到新陣列中。

1.4linkedlist類的實現

public

class

mylinkedlist

implements

iterable

public e data;

public node

prev;

public node

next;

}public

mylinkedlist()

private

void

doclear()

public

intsize()

public

boolean

isempty()

public

boolean

add(e x)

public

void

add(

int index, e x)

public e get

(int index)

public e set

(int index, e newval)

public e remove

(int index)

private

void

addbefore

(node

p, e x)

private e remove

(node

p)private node

getnode

(int index)

private node

getnode

(int index,

int lower,

int upper)

if(index <

size()

/2)}

else

}return p;

}@override

public iterator

iterator()

private

class

linkedlistiterator

implements

iterator

@override

public e next()

if(!hasnext()

) e nextitem = current.data;

current = current.next;

oktoremove =

true

;return nextitem;

}public

void

remove()

mylinkedlist.

this

.remove

(current.prev)

; expectedmodcount++

; oktoremove =

false;}

}}

為了檢驗在迭代期間集合被修改的情況,迭代器在modcount儲存在資料域expectedmodcount中,在處 如果next 已經被執行而沒有其後的remove,則布林資料域為true,oktoremove初始化為false,在next的方法中置為true

Java實現棧 佇列 鍊錶

棧 底層陣列 棧頂指標 public class mystack 自定義構造器,自定義初始化棧大小 public mystack int initsize 插入 public void push int num 刪除 public intpop 檢視 public intpeek 佇列 底層陣列 佇...

(二)棧和佇列(Java實現)

本文主要是陣列和鍊錶實現棧 鍊錶實現佇列。棧和佇列的結構都比較簡單,用鍊錶實現時都是單鏈表實現的!先進後出。先進來的元素儲存在棧的最底部,新來的元素則在棧頂堆積,直到棧滿為止 而取元素的時候,只能從棧頂取,直到棧空為止。棧有兩種方法 壓棧 push 和彈棧 pop 陣列和鍊錶都可以實現。陣列最好只實...

棧 佇列 Java實現

鍊錶實現的棧 由於棧先進後出的特性,push時要用首插法,pop也從頭部開始 push 先檢查鍊錶是否空,空則作為頭結點 再從head開始pop,也有乙個空的判斷 public class linkedstack else public intpop else public void printal...