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