表插入排序
随机产生一组数,通过链表进行排序,然后在复制到数组中,提高效率
class Link
{
public long ddata;
public Link next;
public Link(long dd)
{
ddata = dd;
}
public void displayLink()
{
System.out.println(ddata + " ");
}
}
class SortedList
{
private Link first;
public SortedList()
{
first = null;
}
public SortedList(Link[] linkArr)
{
first = null;
for(int j=0;j<linkArr.length;j++)
insert(linkArr[j]);
}
public boolean Empty()
{
return (first == null);
}
public void insert(Link k)
{
Link previous = null;
Link current = first;
while(current !=null&&k.ddata>current.ddata)
{
previous = current;
current = current.next;
}
if(previous == null)
first = k;
else
previous.next =k;
k.next = current;
}
public Link remove()
{
Link temp = first;
first = first.next;
return temp;
}
public void displayList()
{
System.out.println("link");
Link currrent = first;
while(currrent != null)
{
currrent.displayLink();
currrent = currrent.next;
}
System.out.println(" ");
}
}
class ListInsertionApp
{
public static void main(String[] args)
{
int size = 10;
Link[] linkArray = new Link[size];
for(int j=0;j<size;j++)
{
int n = (int)(java.lang.Math.random()*99);
Link newLink = new Link(n);
linkArray[j] = newLink;
}
System.out.println("unsorted");
for(int j=0;j<size;j++)
{
System.out.print(linkArray[j].ddata+" ");
System.out.println(" ");
SortedList theSortedList = new SortedList(linkArray);
for(int i=0;i<size;i++)
linkArray[i] = theSortedList.remove();
System.out.print("sorted");
for(int x=0;x<size;x++)
System.out.print(linkArray[x].ddata+" ");
System.out.println(" ");
}
}
}
双向链表:允许向前遍历也允许向后遍历
缺点:每次插入和删除一个链结点的时候,要出来四个链结点的引用,而不是两个。
一下是插入功能,分为从链表头插入和链表尾插入
class Link
{
public long ddata;
public Link next;
public Link previous;
public Link(long d)
{
ddata = d;
}
public void displayLink()
{
System.out.println(ddata + " ");
}
}
class DoublyLinkedList
{
private Link first;
private Link last;
public DoublyLinkedList()
{
first = null;
last = null;
}
public boolean isEmpty()
{
return first == null;
}
public void insertFirst(long dd)
{
Link newLink = new Link(dd);
if(isEmpty())
last = newLink;
else
first.previous = newLink;
newLink.next = first;
first = newLink;
}
public void insertLast(long dd)
{
Link newLink = new Link(dd);
if(isEmpty())
first = newLink;
else
{
last.next = newLink;
newLink.previous = last;
}
last = newLink;
}
}