码迷,mamicode.com
首页 > 编程语言 > 详细

详谈单链表之合并and冒泡排序

时间:2015-04-04 10:44:35      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:java   数据结构   线性表   算法   

<span style="font-family:KaiTi_GB2312;font-size:18px;"><strong>  线性表一章基本看完了,但是感觉还学得太少,应该和一些经典的算法相结合,看看自己应用的如何。不得不承认自己只是做简单的实现,并没有对代码进行太多的优化。。。希望各位大神莫怪~~废话少说,代码搞起。。</strong></span>
<strong><span style="font-family:KaiTi_GB2312;font-size:18px;">//有序链表的合并
class MergerSingleList {
 private Nod head;

 public Nod getHead() {
  return head;
 }
 public void setHead(Nod head) {
  this.head = head;
 }
 public Nod getTail() {
  return tail;
 }
 public void setTail(Nod tail) {
  this.tail = tail;
 }
 // 查找指定位置的结点
 public Nod FindKth(int k) {
  Nod temp = head;
  int i = 1;
  while (temp != null && i < k) { // 移动元素,直到找到相应位置
   temp = temp.next;
   i++;
  }
  if (i == k)
   return temp;
  else
   return null;
 }
 // 将结点插入指定位置
 public void insert(int index, int a) {
  Nod newNode = new Nod(a);
  if (index > Length + 1) {
   System.out.println("超出范围,无法插入");
  } else {
   if (index == 1) {
    newNode.next = head;
    head = newNode;
    Length++;
   } else if (index > 1 && index < 100) {
    newNode.next = FindKth(index - 1).next;
    FindKth(index - 1).next = newNode;
    Length++;
   }
  }
 }
 // 打印链表
 public void display() {
  Nod current = head;
  while (current != null) {
   current.displayNod();
   current = current.next;
  }
 }
 // Sort
 public void BubbleSort(MergerSingleList m1) {
  Nod current1 = null;
  Nod current2 = null;
  int temp = 0;
  for (int k = m1.Length - 1; k > 0; k--) {
   for (int i = 1; i < k + 1; i++) {
    if (i <= m1.Length) {
     current1 = m1.FindKth(i);
     current2 = m1.FindKth(i + 1);
     if (current1.key > current2.key) {
      temp = current1.key;
      current1.key = current2.key;
      current2.key = temp;
     }
    }
   }
  }
  m1.display();
 }
 public static void main(String args[]) {
  MergerSingleList ms1 = new MergerSingleList();
  MergerSingleList ms2 = new MergerSingleList();
  // 在单链表1中插入元素
  ms1.insert(1, 1);
  ms1.insert(2, 2);
  ms1.insert(3, 3);
  ms1.insert(4, 8);
  ms1.insert(5, 9);
  // 在单链表2中插入元素
  ms2.insert(1, 4);
  ms2.insert(2, 5);
  ms2.insert(3, 6);
  ms2.insert(4, 7);
  ms2.insert(5, 7);
  // 打印单链表1、2
  System.out.println("单链表1");
  ms1.display();
  System.out.println();
  System.out.println("单链表2");
  ms2.display();
  System.out.println();
  /** ************************方法1************************** */
  // ms1.FindKth(ms1.Length).next = ms2.head;
  // System.out.println("单链表合并后为:");
  // ms1.display();
  /** ************************方法2************************** */
  // 建立单链表3,存放单链表1、2的元素
  MergerSingleList ms3 = new MergerSingleList();
  for (int i = 0; i <= (ms1.Length + ms2.Length); i++) {
   ms3.insert(i, 0);
  }
  System.out.println("单链表3");
  ms3.display();
  System.out.println();
  ms3 = ms1;
  System.out.println("将单链表1存放到单链表3后");
  ms3.display();
  System.out.println();
  for (int j = 1; j <= ms2.Length; j++) {
   int a = ms2.FindKth(j).key;
   ms3.insert(ms1.Length + 1, a);
  }
  System.out.println("合并的链表");
  ms3.display();
  System.out.println();
  System.out.println("排序后的链表");
  ms3.BubbleSort(ms3);
 }
}
class Nod {
 public int key;
 public Nod next;
 // 初始化头结点
 public Nod(int head) {
  this.key = head;
  this.next = null;
 }
 public void displayNod() {
  System.out.print(key + " -> ");
 }
}
</span></strong>

详谈单链表之合并and冒泡排序

标签:java   数据结构   线性表   算法   

原文地址:http://blog.csdn.net/qq_21394609/article/details/44871111

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!