鍊錶的實現,在我看來它的實現,是有兩種不同的實現方式。
第一種實現方式是帶頭指標的實現方式。
第二種實現方式是不帶頭指標的實現方式。
當我們考慮使用不帶頭指標的會比較複雜些。因為你要考慮插在鍊錶頭部插入和其他位置的插入式有區別的。
每次的鍊錶的插入要考慮是不是頭部插入和頭部刪除。進行分情況處理。
定義的抽象介面
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 單鏈表在增加和刪除上要比陣列結構更加快捷。原因 因為順序表在記憶體中是相連的,所以刪除乙個節點,在該節點之後的節點都要隨之前移,所以效率不高。而單鏈表使...