5 鍊錶的實現

2021-09-13 12:53:53 字數 4082 閱讀 5548

鍊錶的實現,在我看來它的實現,是有兩種不同的實現方式。

第一種實現方式是帶頭指標的實現方式。

第二種實現方式是不帶頭指標的實現方式。

當我們考慮使用不帶頭指標的會比較複雜些。因為你要考慮插在鍊錶頭部插入和其他位置的插入式有區別的。

每次的鍊錶的插入要考慮是不是頭部插入和頭部刪除。進行分情況處理。

定義的抽象介面

package com.ipp.list;

public inte***ce linklist

實現**

package com.ipp.list.impl;

import com.ipp.list.linklist;

public class linklistimpl2implements linklist

public node(e e)

public node()

@override

public string tostring()

}//頭結點

private node head;

//大小

private int size;

public linklistimpl2()

@override

public int getsize()

@override

public void add(int index, e e)

node pre = head;

for (int i = 1; i < index; i++)

pre.next = new node(e, pre.next);

//1、相當於下面的三步操作

/* node node=new node(e);

node.next=pre.next;

pre.next=node;*/

}@override

public void addfirst(e e)

@override

public void addlast(e e)

@override

public boolean isempty()

@override

public e get(int index)

node cur = head;

for (int i = 0; i < index; i++)

return cur.e;

}@override

public e getfirst()

@override

public e getlast()

@override

public void set(int index, e e)

node cur = head;

for (int i = 0; i < index; i++)

cur.e = e;

}@override

public boolean contains(e e)

cur = cur.next;

}return false;

}@override

public e remove(int index)

//如果是刪除第乙個元素

if (index == 0) else

//3、找到要刪除的元素

node cur = pre.next;

e res = cur.e;

//3、進行刪除操作

pre.next = cur.next;

cur = null;

size--;

return res;}}

@override

public e removefirst()

@override

public e removelast()

@override

public void removeelement(e e)

if (size == 0)

if (head.e.equals(e))

node pre = head;

node cur = head.next;

while (cur != null)

pre=pre.next;

cur=cur.next;

}return;

}}

package com.ipp.list.impl;

import com.ipp.list.linklist;

public class linklistimplimplements linklist

public node(e e)

public node()

@override

public string tostring()

}//頭結點

private node head;

//大小

private int size;

/*** 建構函式

*/public linklistimpl()

@override

public e get(int index)

node cur = head.next;

for (int i = 0; i < index; i++)

return cur.e;

}@override

public e getfirst()

@override

public e getlast()

@override

public void set(int index, e e)

node cur = head.next;

for (int i = 0; i < index; i++)

cur.e = e;

}@override

public boolean contains(e e)

return false;

}@override

public int getsize()

@override

public void add(int index, e e)

node pre = head;

//2、找到對應的插入對方.

for (int i = 0; i < index; i++)

//3、進行插入操作。

pre.next = new node(e, pre.next);

//相當於下面三個操作

/*node node=new node(e);

node.next=pre.next;

pre.next=node;*/

//4、size更新

size++;

}@override

public void addfirst(e e)

@override

public void addlast(e e)

@override

public boolean isempty()

@override

public e remove(int index)

node pre=head;

for(int i=0;inode cur=pre.next;

pre.next=cur.next;

e res=cur.e;

cur.next=null;

size--;

return res;

}@override

public e removefirst()

@override

public e removelast()

@override

public void removeelement(e e)

node pre=head;

node cur=head.next;

while(cur!=null)

pre=pre.next;

cur=pre.next;}}

}

鍊錶的實現

鍊錶是一種非常重要的資料結構,比起陣列來雖然操作繁瑣,查詢效率也不如陣列效率高,但在進行插入刪除操作時,鍊錶具有陣列無法比擬的效率,下面的 是鍊錶的實現 include include include define n 100 typedef struct node link link node i...

鍊錶的實現

include using namespace std template class linklist node head public linklist t a,int n 0 利用尾插法來構建線性鍊錶 linklist bool isempty 不為空,則返回0,為空則返回非0 t getnod...

鍊錶的實現

記憶體結構 鍊錶也是資料結構的一種,但是和陣列不一樣,陣列在記憶體中每個節點的位置是相連的。而鍊錶的每個節點在物件中是分散的,依靠引用相連。優點1 單鏈表在增加和刪除上要比陣列結構更加快捷。原因 因為順序表在記憶體中是相連的,所以刪除乙個節點,在該節點之後的節點都要隨之前移,所以效率不高。而單鏈表使...