java 链表形式线性表插入排序
2013-05-02 15:04
246 查看
链表形式的线性表排序时采用插入排序
import java.util.Iterator;
public interface ListInterface<T>{
public boolean add(T newEntry);
public boolean add(int newPosition, T newEntry);
public T remove(int givenPosition);
public void clear();
public T set(int givenPosition, T newEntry);
public T get(int givenPosition);
public boolean contains(T anEntry);
public int size();
public boolean isEmpty();
public boolean isFull();
public void display();
}
import java.util.Iterator;
public interface ListInterface<T>{
public boolean add(T newEntry);
public boolean add(int newPosition, T newEntry);
public T remove(int givenPosition);
public void clear();
public T set(int givenPosition, T newEntry);
public T get(int givenPosition);
public boolean contains(T anEntry);
public int size();
public boolean isEmpty();
public boolean isFull();
public void display();
}
public class LinkedChainList<T extends Comparable<? super T>> implements ListInterface<T> { private Node firstNode; private int length; private class Node { private T data; private Node next; Node(T dataPortion) { data = dataPortion; next = null; } Node(T dataPortion, Node nextNode) { data = dataPortion; next = nextNode; } public T getData() { return data; } public void setData(T data) { this.data = data; } public Node getNext() { return next; } public void setNext(Node next) { this.next = next; } } public LinkedChainList() { // TODO Auto-generated constructor stub clear(); } public Node getNodeAt(int givenPosition) { Node currentNode = firstNode; if (!isEmpty() && givenPosition >= 0 && givenPosition < length) { for (int i = 0; i < givenPosition; i++) { currentNode = currentNode.getNext(); } } else { currentNode = null; } return currentNode; } @Override public boolean add(T newEntry) { // TODO Auto-generated method stub Node newNode = new Node(newEntry); if (isEmpty()) { firstNode = newNode; } else { Node lastNode = getNodeAt(length - 1); lastNode.setNext(newNode); } length++; System.out.println("add : " + newEntry); return true; } @Override public boolean add(int newPosition, T newEntry) { // TODO Auto-generated method stub boolean isAdd = true; if (newPosition >= 0 && newPosition <= length) { Node newNode = new Node(newEntry); if (isEmpty() || newPosition == 0) { newNode.setNext(firstNode); firstNode = newNode; } else { Node before = getNodeAt(newPosition - 1); Node after = before.getNext(); newNode.setNext(after); before.setNext(newNode); } length++; } else isAdd = false; return isAdd; } @Override public T remove(int givenPosition) { // TODO Auto-generated method stub T result = null; if (!isEmpty() && givenPosition >= 0 && givenPosition < length) { if (givenPosition == 0) { result = firstNode.getData(); firstNode = firstNode.getNext(); } else { Node before = getNodeAt(givenPosition - 1); Node remove = before.getNext(); Node after = remove.getNext(); before.setNext(after); result = remove.getData(); } length--; } else { System.out.println("删除出错"); } return result; } @Override public final void clear() { // TODO Auto-generated method stub firstNode = null; length = 0; } @Override public T set(int givenPosition, T newEntry) { // TODO Auto-generated method stub T old = null; if (!isEmpty() && givenPosition >= 0 && givenPosition < length) { Node oldNode = getNodeAt(givenPosition); old = oldNode.getData(); oldNode.setData(newEntry); } else { System.out.println("设置出错"); } return old; } @Override public T get(int givenPosition) { // TODO Auto-generated method stub T result = null; if (!isEmpty() && givenPosition >= 0 && givenPosition < length) result = getNodeAt(givenPosition).getData(); return result; } @Override public boolean contains(T anEntry) { // TODO Auto-generated method stub boolean isContain = false; Node currentnNode = firstNode; while (!isContain && currentnNode != null) { if (anEntry.equals(currentnNode.getData())) { isContain = true; System.out.println("包含该元素"); } else { currentnNode = currentnNode.getNext(); } } if (isContain == false) System.out.println("不包含该元素"); return isContain; } @Override public int size() { // TODO Auto-generated method stub System.out.println("size : " + length); return length; } @Override public boolean isEmpty() { // TODO Auto-generated method stub boolean result; if (length == 0 && firstNode == null) { result = true; } else { result = false; } return result; } @Override public boolean isFull() { // TODO Auto-generated method stub return false; } @Override public void display() { // TODO Auto-generated method stub Node currentNode = firstNode; System.out.print("The list : "); while (currentNode != null) { System.out.print(currentNode.getData() + " "); currentNode = currentNode.getNext(); } System.out.println(); } private void insertInOrder(Node nodeToInsert) { T item=nodeToInsert.getData(); Node currentNode=firstNode; Node previousNode=null; while((currentNode!=null)&&item.compareTo(currentNode.getData())>0) { previousNode=currentNode; currentNode=currentNode.getNext(); } if(previousNode!=null) { previousNode.setNext(nodeToInsert); nodeToInsert.setNext(currentNode); } else { nodeToInsert.setNext(firstNode); firstNode=nodeToInsert; } } public void insertSort() { if (length > 1) { Node unsortedPart = firstNode.getNext(); firstNode.setNext(null); while(unsortedPart!=null) { Node nodeToInsert=unsortedPart; unsortedPart=unsortedPart.getNext(); insertInOrder(nodeToInsert); } } else if (length == 1) { System.out.println("链表中只有一个元素不用排序"); } else { System.out.println("链表中没有元素无法排序"); } } public static void main(String[] argv) { LinkedChainList<Integer> list=new LinkedChainList<Integer>(); list.add(2); list.add(3); list.add(2); list.add(6); list.add(4); list.add(5); list.display(); list.insertSort(); list.display(); list.add(1); list.display(); list.insertSort(); list.display(); } }
相关文章推荐
- 单向链表插入排序 Java
- Java实现链表的插入,删除,排序,输出
- 链表插入、链表相加、链表相乘、链表排序、链表合并等操作的java实现
- LeetCode-147. Insertion Sort List (JAVA)链表插入排序
- java语言编写链表的基本操作(链表的创建,插入,删除,打印,排序)
- C语言中,链表的创建,插入,删除,遍历,求链表长度,排序等
- 单链表节点插入并进行排序
- 什么是单链表插入排序?
- 剑指Offer--面试题17:合并两个排序的链表--Java实现
- 经典排序算法(二)--插入排序、希尔排序(Java实现)
- java数据结构之插入排序(直接插入排序、折半插入排序、希尔排序)
- Java排序--插入排序
- 直接插入排序(Java实现)
- 冒泡,简单选择,直接插入排序(Java版)
- 复习数据结构链表插入排序
- java里的4种排序算法测试——冒泡、选择、插入、快速排序
- Java使用二分插入排序竟然和直接插入排序速度相差不多
- Java实现-删除排序链表中的重复元素2
- java插入排序兼编码注意
- 【程序员面试宝典】数据结构基础一单链表:创建|求长|插入|删除|排序|打印|逆置