public void sort() { Node_SF iterator = headAndRoot; Node_SF previous = headAndRoot; int tempF; string tempS; while (previous.next != null) { while (iterator.next != null) { if (iterator.frequence > iterator.next.frequence) { tempF = iterator.frequence; iterator.frequence = iterator.next.frequence; iterator.next.frequence = tempF; tempS = iterator.Symbol; iterator.Symbol = iterator.next.Symbol; iterator.next.Symbol = tempS; } iterator = iterator.next; } iterator = headAndRoot; previous = previous.next; } }
public void addSortedToCopy(Node_SF nodeControl, LinkedList_SF list) { if (list.headAndRoot == null) { list.headAndRoot = nodeControl; } else if (list.headAndRoot.frequence.CompareTo(nodeControl.frequence) >= 0) { nodeControl.next = list.headAndRoot; list.headAndRoot = nodeControl; } else { Node_SF iterator = list.headAndRoot.next; Node_SF previous = list.headAndRoot; while (iterator != null) { if (iterator.frequence.CompareTo(nodeControl.frequence) >= 0) { previous.next = nodeControl; nodeControl.next = iterator; break; } previous = iterator; iterator = iterator.next; } if (iterator == null) { previous.next = nodeControl; } } }
public void addSorted(Node_SF node) { Node_SF newNode = node; if (headAndRoot == null) { headAndRoot = newNode; } else if (headAndRoot.frequence.CompareTo(newNode.frequence) >= 0) { newNode.next = headAndRoot; headAndRoot = newNode; } else { Node_SF iterator = headAndRoot.next; Node_SF previous = headAndRoot; while (iterator != null) { if (iterator.frequence.CompareTo(node.frequence) >= 0) { previous.next = node; node.next = iterator; break; } previous = iterator; iterator = iterator.next; } if (iterator == null) { previous.next = newNode; } } }
public void deleteOne(string val) { if (headAndRoot == null) { return; } if (headAndRoot.Symbol.CompareTo(val) == 0) { headAndRoot = headAndRoot.next; } else { Node_SF iterator = headAndRoot; while (iterator.next != null) { if (iterator.next.Symbol.CompareTo(val) == 0) { iterator.next = iterator.next.next; break; } iterator = iterator.next; } } }
//kullanılmayan metodlar public void inorder(Node_SF currentRoot) { if (currentRoot != null) { inorder(currentRoot.Left); Console.WriteLine(currentRoot.getString()); inorder(currentRoot.Right); } }
public Node_SF getAndRemoveFirstNode() //listenin ilk elemanını dondurup listeden silen metod { Node_SF temp = null; // return etmeden once head e baska atamalar yapmak icin gecici kullandik if (headAndRoot != null) { temp = headAndRoot; headAndRoot = headAndRoot.next; } return(temp); }
public LinkedList_SF copy() { LinkedList_SF newList = new LinkedList_SF(); Node_SF iterator = headAndRoot; while (iterator != null) { newList.addToFront(iterator.Symbol, iterator.frequence); iterator = iterator.next; } return(newList); }
public int Length() { Node_SF iterator = headAndRoot; int counter = 0; while (iterator != null) { counter++; iterator = iterator.next; } return(counter); }
public void display() { if (headAndRoot != null) { Node_SF iterator = headAndRoot; while (iterator != null) { Console.WriteLine(iterator.getString()); iterator = iterator.next; } } }
public void addToFront(Node_SF node) { Node_SF newNode = node; if (headAndRoot == null) { headAndRoot = newNode; } else { newNode.next = headAndRoot; headAndRoot = newNode; } }
public void addToFront(string symbol, int freq) { Node_SF newNode = new Node_SF(symbol, freq); if (headAndRoot == null) { headAndRoot = newNode; } else { newNode.next = headAndRoot; headAndRoot = newNode; } }
public Node_SF findNodeByCode(string code) { Node_SF iterator = headAndRoot; while (iterator != null) { if (iterator.code.CompareTo(code) == 0) { return(iterator); } iterator = iterator.next; } return(null); }
public Node_SF findNodeBySymbol(string sym) { Node_SF iterator = headAndRoot; while (iterator != null) { if (iterator.Symbol.CompareTo(sym) == 0) { return(iterator); } iterator = iterator.next; } return(null); }
public void addToFront(string val) { Node_SF newNode = new Node_SF(val); if (headAndRoot == null) { headAndRoot = newNode; } else { newNode.next = headAndRoot; headAndRoot = newNode; } }
public bool haveSameCode(string code) { if (headAndRoot != null) { Node_SF iterator = headAndRoot; while (iterator != null) { if (iterator.code.CompareTo(code) == 0) { return(true); } iterator = iterator.next; } } return(false); }
public bool haveSameSym(string chr) { if (headAndRoot != null) { Node_SF iterator = headAndRoot; while (iterator != null) { if (iterator.Symbol.CompareTo(chr) == 0) { return(true); } iterator = iterator.next; } } return(false); }
private void makeTree() { Node_SF first, second; llSemFrqCode = new LinkedList_SF(); llSemFrqCode = llTree.copy(); //sadece harflerin kodlarını bulmak icin listeyi bozulmadan once yedekliyoruz. while (llTree.Length() > 1) // bu döngünün içinde ağaç oluşturuluyor. { //ilk iki eleman alıp, yeni bir nod olusturulup, olusturulan yeni node un yaprakları oluyor. first = llTree.getAndRemoveFirstNode(); second = llTree.getAndRemoveFirstNode(); Node_SF addedNode = new Node_SF((first.Symbol + second.Symbol), (first.frequence + second.frequence)); addedNode.Left = first; addedNode.Right = second; //olusturulan yeni node listeye tekrar sirali bir sekiilde ekleniyor. llTree.addSorted(addedNode); } }
public void addToEnd(string val) { Node_SF newNode = new Node_SF(val); if (headAndRoot == null) { headAndRoot = newNode; } else { Node_SF iterator = headAndRoot; while (iterator.next != null) { iterator = iterator.next; } iterator.next = newNode; } }
public void findCode(LinkedList_SF getTree) // harflerin kodunu bulup döndüren metod { LinkedList_SF tree = getTree; string code = ""; if (headAndRoot != null) { Node_SF iteratorSingleSymbol = headAndRoot; // her bir sembolun kodunu bulmak için bütün elemanları dolasacak olan iterator. if (haveChar(tree.headAndRoot.Symbol, iteratorSingleSymbol.Symbol)) // eğer root un içinde o sembol yoksa boşuna arama yapmayacak { while (iteratorSingleSymbol != null) { Node_SF iteratorTree = tree.headAndRoot; while (iteratorTree != null) { while (iteratorTree.Left != null && iteratorTree.Right != null) { if (haveChar(iteratorTree.Left.Symbol, iteratorSingleSymbol.Symbol)) // eğer aradığı sembol soldaki parent ın içinde varsa { iteratorTree = iteratorTree.Left; // sembolü bulamamışsa iteratörü bir alt node a taşıyacak... code += 0; //ve koda 0 ekleyece } else if (haveChar(iteratorTree.Right.Symbol, iteratorSingleSymbol.Symbol)) // aradığı sembol sağdaysa { iteratorTree = iteratorTree.Right; // sembolü bulamamışsa iteratörü bir alt node a taşıyacak... code += 1; } } iteratorSingleSymbol.code = code; // eğer node un lefti ve right ı boşsa yapraga gelmistir ve kod hazırdır. code = ""; // diğer semboller icin kodu bosalttik break; //kodu bulduktan sonra donguden cikip diger sembole gececek. } iteratorSingleSymbol = iteratorSingleSymbol.next; //sonraki sembolu atadik. } } } }