2016-03-26 18 views
1

Merhaba Çift bağlanmış listemde bir kabarcık sıralaması yürütme konusunda bir sorunum var. Kabarcık sıralaması farklı liste türleri üzerinde çalışır, bu yüzden doğru olduğunu varsayarak. Ancak onu çift bağlantılı listemde kullandığımda, sıralanmamış bir karışıklık ve yinelenen düğümlerle sonuçlanırım. Çift bağlantılı liste sınıfında bir add ve remove yöntemini kullanarak sıralama yapıyorum, bu yüzden bir veya iki yanlış olması gerektiğini düşünüyorum. Her neyse, benim kodum ve herhangi bir yardım çok takdir edilecektir.Çift Bağlantılı Liste için yöntem ekleme (Kabarcık Sıralaması)

My eklenti yöntemi ben

public void my_remove_element(int index) throws myException{ 
    if(index < num_items) 
    { 
     myNode<T> current; 
     if(index <= Math.round(num_items/2)) 
     { 
      current = this.head; 
      for(int i = 0; i < index; i++) 
      { 
       current = current.getRight(); 
      } 
      if(current.getLeft() == null) 
       this.head = current.getRight(); 
      else 
      { 
       current.getRight().setLeft(current.getLeft()); 
       current.getLeft().setRight(current.getRight()); 
      } 
      num_items--; 
     } 
     else 
     { 
      current = this.tail; 
      for(int i = 0; i < (num_items-(index+1)); i++) 
      { 
       current = current.getLeft(); 
      } 
      if(current.getRight() == null) 
       this.tail = current.getLeft(); 
      else 
      { 
       current.getRight().setLeft(current.getLeft()); 
       current.getLeft().setRight(current.getRight()); 
      } 
      num_items--; 
     } 
    } 
    //2.2. If the index is a wrong one 
    else 
     throw new myException("Invalid Index. The ADT does not have such an Index Position"); 
} 

Ve kabarcık sıralama, ürün aynı yine endeks

public void my_add_element(int index, T element) throws myException{ 
    if(index <= num_items && index > -1) 
    { 
     if (index == num_items){ 
      myNode<T> nodeAtEnd = new myNode<T>(element); 
      nodeAtEnd.setLeft(tail); 
      nodeAtEnd.setRight(null); 
      if(tail != null) 
       tail.setRight(nodeAtEnd); //link the list 

      tail = nodeAtEnd; //now the tail is the new node i added 

      if(head == null)  // if the list has no elements then set the head 
       head = nodeAtEnd; 

      num_items++; 
     } 
     else 
     { 
      myNode<T> current; 
      myNode<T> nodeToInsert = new myNode<T>(element); 
      if(index <= Math.round(num_items/2)) 
      { 
       current = this.head; 
       for(int i = 0; i < index; i++) 
       { 
        current = current.getRight(); 
       } 
       if(current.getLeft() == null) 
       { 
        this.head = nodeToInsert; 
        nodeToInsert.setRight(current); 
        current.setLeft(nodeToInsert); 
        num_items++; 
       } 
       else 
       { 
        current.getLeft().setRight(nodeToInsert); 
        nodeToInsert.setLeft(current.getLeft()); 
        nodeToInsert.setRight(current); 
        current.setLeft(nodeToInsert); 
        num_items++; 
       } 
      } 

      else 
      { 
       current = this.tail; 
       for(int i = 0; i < (num_items-(index+1)); i++) 
       { 
        current = current.getLeft(); 
       } 
       current.getLeft().setRight(nodeToInsert); 
       nodeToInsert.setLeft(current.getLeft()); 
       nodeToInsert.setRight(current); 
       current.setLeft(nodeToInsert); 
       num_items++; 
      } 
     } 
    } 
    else 
     throw new myException("Invalid Index. The ADT does not have such an Index Position"); 

} 

My kaldır yöntemi değerine bağlı olarak ya kafa veya kuyruk listesinde geçiş birkaç farklı liste türü olabilecek bir liste, örn. arrayList, linkedList, doubleLinkedList. Kabarcık sıralaması arrayList ve LinkedList için çalışır.

ürün futbolcu detaylarının listesini (ören adı, gol attı) içerir. Bu, kullandığım liste.

Adı: Rooney, Hedefleri: 30
Adı: Ibrahimovic, Hedefleri: 46
Adı: Messi Hedefleri: 80
Adı: Aguero, Hedefleri: 21
Adı: Ronaldo Hedefleri: 89
Adı : Muller, Hedefler: 33
Adı: Lewandowski, Hedefler: 30

Ve bu kabarcığın sıralama

İsim sonra neye benzediği: Ib rahimovic, Amaçlar: 46
Adı: Messi Hedefleri: 80
Adı: Ibrahimovic, Hedefleri: 46
Adı: Ibrahimovic, Hedefleri: 46
Adı: Lewandowski, Hedefleri: 30
Adı: Rooney, Amaçlar: 30
Adı: Aguero, Hedefler: 21

cevap

0

GÜNCELLEME

Merhaba tüm olayı çözdüm. Kaldırma yöntemim, dizinin 0 veya = num_items

için işaretçisi güncellenmemiştir.
İlgili konular