Exemplo n.º 1
0
        public void AddRange(IntLinkedList Values)
        {
            IntLinkedItem item = Values.firstItem;

            while (item != null)
            {
                Add(item.Value);
                item = item.NextItem;
            }
        }
Exemplo n.º 2
0
        public int[] ToArray()
        {
            int[]         results = new int[Count];
            int           pos     = 0;
            IntLinkedItem item    = firstItem;

            while (item != null)
            {
                results[pos++] = item.Value;
                item           = item.NextItem;
            }
            return(results);
        }
Exemplo n.º 3
0
        public void InsertBefore(IntLinkedItem Item, int Value)
        {
            IntLinkedItem newItem = new IntLinkedItem {
                PreviousItem = Item.PreviousItem, NextItem = Item, Value = Value
            };

            if (Item.PreviousItem != null)
            {
                Item.PreviousItem.NextItem = newItem;
            }
            Item.PreviousItem = newItem;
            if (Item == firstItem)
            {
                firstItem = newItem;
            }
            count++;
        }
Exemplo n.º 4
0
 public void Add(int Value)
 {
     if (firstItem == null)
     {
         firstItem = lastItem = new IntLinkedItem {
             Value = Value
         }
     }
     ;
     else
     {
         IntLinkedItem item = new IntLinkedItem {
             PreviousItem = lastItem, Value = Value
         };
         lastItem.NextItem = item;
         lastItem          = item;
     }
     count++;
 }
Exemplo n.º 5
0
 public void Remove(IntLinkedItem Item)
 {
     if (Item == firstItem)
     {
         firstItem = Item.NextItem;
     }
     if (Item == lastItem)
     {
         lastItem = Item.PreviousItem;
     }
     if (Item.PreviousItem != null)
     {
         Item.PreviousItem.NextItem = Item.NextItem;
     }
     if (Item.NextItem != null)
     {
         Item.NextItem.PreviousItem = Item.PreviousItem;
     }
     count--;
 }
Exemplo n.º 6
0
    public static int[] SortWithoutGenerics(int[] Values)
    {
        IntLinkedList Original = new IntLinkedList();
        IntLinkedList Result   = new IntLinkedList();
        IntLinkedList Sublist  = new IntLinkedList();

        Original.AddRange(Values);
        //While we still have numbers to sort
        while (Original.Count > 0)
        {
            //Clear sublist and take first available number from original to the new sublist
            Sublist.Clear();
            Sublist.Add(Original.FirstItem.Value);
            Original.Remove(Original.FirstItem);

            IntLinkedItem currentOriginalItem = Original.FirstItem;
            //Iterate through original numbers
            while (currentOriginalItem != null)
            {
                //If the number is bigger than the last item in the sublist
                if (currentOriginalItem.Value > Sublist.LastItem.Value)
                {
                    //Add it to the sublist and remove it from original
                    Sublist.Add(currentOriginalItem.Value);
                    //Store the next item
                    IntLinkedItem nextItem = currentOriginalItem.NextItem;
                    //Remove current item from original
                    Original.Remove(currentOriginalItem);
                    //Set next item as current item
                    currentOriginalItem = nextItem;
                }
                currentOriginalItem = currentOriginalItem.NextItem;
            }
            //If this is the first sublist
            if (Result.Count == 0)
            {
                Result.AddRange(Sublist);     //Add all the numbers to the result
            }
            else
            {
                IntLinkedItem currentSublistItem = Sublist.FirstItem;

                //Iterate through the sublist
                while (currentSublistItem != null)
                {
                    bool          inserted          = false;
                    IntLinkedItem currentResultItem = Result.FirstItem;
                    //Iterate through the current result
                    while (currentResultItem != null)
                    {
                        //Is the sublist number lower than the current item from result?
                        if (currentSublistItem.Value < currentResultItem.Value)
                        {
                            //Yes, insert it at the current Result position
                            Result.InsertBefore(currentResultItem, currentSublistItem.Value);
                            inserted = true;
                            break;
                        }
                        currentResultItem = currentResultItem.NextItem;
                    }
                    //Did we inserted the item because found it was lower than one of the result's number?
                    if (!inserted)
                    {
                        Result.Add(currentSublistItem.Value);    //No, we add it to the end of the results
                    }
                    currentSublistItem = currentSublistItem.NextItem;
                }
            }
        }
        //Return the results
        return(Result.ToArray());
    }
Exemplo n.º 7
0
 public void Clear()
 {
     count     = 0;
     firstItem = lastItem = null;
 }