集合 鏈式儲存的實現

2021-07-16 05:57:07 字數 3371 閱讀 3479

集合的順序儲存是通過陣列來實現的,集合的鏈式儲存是通過儲存結點之間的鏈結來實現的,從而形成鍊錶。鍊錶中的每乙個結點都包含乙個值域和乙個指標(即引用物件域),每個結點的指標指向下乙個結點物件,這樣的鍊錶稱之為單鏈表。在單鏈表中,第乙個結點稱之為表頭結點,指向第乙個結點的指標被稱為表頭指標,最後乙個結點稱為表尾結點,表尾結點的指標為空。通常,為了方便插入和刪除結點,通常在表頭結點增加乙個無值的結點,我們稱之為附加頭結點,用head表示,如鍊表為空,附加頭結點的指標域指向自身,指標域為空,若煉表不為空,則附加頭結點的指標指向第乙個結點。如下圖所示。

我們定義類名為node,數值域和指標域分別用element和next表示。該類包括兩個構造方法,乙個只帶有結點引用物件引數,實現對當前next結點的賦值;另乙個帶有兩個引數,分別實現對當前結點的值域element和指標域next的賦值。node結點的定義如下:

public

class node

public

node(object element,node next)

}

1 、初始化集合,首先我們要定義附加頭結點head為null和鍊錶的長度length為0,然後再定義乙個無參構造方法。

public

class linkedset

}

2 、向集合中新增乙個元素

public

boolean

add(object obj)else

}temp.next = new node(obj,null); //temp為鍊錶的最後乙個結點,並在該結點後建立乙個新的結點

length++; //鍊錶的長度加1

return

true;

}

3 、從集合中刪除乙個元素

public boolean remove(object obj)

temp = temp.next; //修改temp,指向後繼結點

}if(temp.next!=null)

return

false; //刪除失敗返回false

}

4 、判斷乙個元素是否屬於該集合

public

boolean

contains(object obj)

temp = temp.next; //修改temp,指向後繼結點

}return

false; //若不存在,則返回false

}

5 、返回集合中第i個元素的值

public object get(int

index)

node temp = head; //定義乙個node型別的臨時變數,指向附加頭結點

int i = 1;

while(i<=index)

return temp.element; //返回查詢結點的內容

}

6 、從集合中按值查詢元素

public object find(object obj)

temp = temp.next; //修改temp,指向後繼結點

}return

null; //查詢失敗返回null

}

7 、返回集合的長度

public

intsize()

8 、判斷集合是否為空

public

boolean

isempty()

9 、輸出集合的所有元素

public

void

print()

system.out.println();

}

10 、求兩個集合的並集

public linkedset union(linkedset set)

//settemp新增set集合的元素

node h = set.head.next;

while(h!=null)

return settemp;

}

11 、求兩個集合的交集

public linkedset intersection(linkedset set)

temp = temp.next; //temp指向後繼結點

}

return settemp;

}

12 、清除集合中的所有元素

public

void

clear()

單向鍊錶的具體操作還是比較簡單的,通過與集合的順序表相比,我們很明顯的發現,鍊錶的插入和刪除比順序表要方便的多,順序表需要對陣列元素進行移動,而鍊錶只需要改變指標域即可。但是對於查詢操作來說順序表效率更高,通過索引即可查詢,而鍊錶則需要進行遍歷,大大的降低了效率。

集合的鏈式儲存及操作實現

typedef int elemtype typedef struct snode node 1.初始置空集合,即置表頭指標為空 void initset node head 2.向集合中插入乙個元素,插入這裡在表頭插入 bool insertset node head,elemtype item ...

堆疊的鏈式儲存實現

棧的鏈式儲存結構其實實際上就是乙個單鏈表,叫做鏈棧,插入和刪除操作只能在棧頂操作 若在棧尾,則無法對堆疊進行刪除操作 棧的鏈式儲存結構其實實際上就是乙個單鏈表,叫做鏈棧,插入和刪除操作只能在棧頂操作 若在棧尾,則無法對堆疊進行刪除操作 typedef str uct nodelinkstack li...

堆疊的鏈式儲存實現

include using namespace std typedef int elementtype typedef struct snode stack struct snode 1.建立乙個空棧 stack createstack 2.判斷堆疊是否為空 intisempty stack ptr...