行者无疆
When I was young , I used to think that money was the most important thing in life , now I am old , I know it is.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace CSharpDataStructure
{
    public class BubbleSort
    {
        private int currentLength;
        public int MaxLength { private set; get; }
        private int[] intArray;

        private BubbleSort()
        {
        }

        public int Count
        {
            get
            {
                return currentLength;
            }
        }
        public BubbleSort(int maxLength)
        {
            intArray = new int[maxLength];
            this.MaxLength = maxLength;
            this.currentLength = 0;
        }

        public void Add(int value)
        {
            if (currentLength == this.MaxLength)
            {
                throw new Exception("this array has full.");
            }
            intArray[currentLength] = value;
            currentLength++;
        }

        public void Remove()
        {
            if (currentLength == 0)
            {
                throw new Exception("this array is empty.");
            }
            currentLength--;
        }

        public int GetAt(int index)
        {
            if (index > currentLength)
            {
                throw new Exception("Out of region.");
            }
            return intArray[index];
        }

        public void Display()
        {
            for (int i = 0; i < currentLength; i++)
            {
                Console.WriteLine(intArray[i]);
            }
            Console.Read();
        }

        private void Swap(int index)
        {
            int tempValue = intArray[index];
            if (intArray[index] > intArray[index + 1])
            {
                intArray[index] = intArray[index + 1];
                intArray[index + 1] = tempValue;
            }
        }

        public void SortByBobble(int length)
        {
            for (int i = 0; i < length-1; i++)
            {
                Swap(i);
            }
            length--;
            if (length > 0)
            {
                SortByBobble(length);
            }
        }

        public void SortByBobble()
        {
            for (int i=currentLength-1; i > 0; i--)
            {
                for (int j = 0; j < i; j++)
                {
                    Swap(j);
                }
            }
        }


    }
}


 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace CSharpDataStructure
{
    public class InsertSort
    {
        private int currentLength;
        public int MaxLength { private set; get; }
        private int[] intArray;

        private InsertSort()
        {
        }

        public int Count
        {
            get
            {
                return currentLength;
            }
        }
        public InsertSort(int maxLength)
        {
            intArray = new int[maxLength];
            this.MaxLength = maxLength;
            this.currentLength = 0;
        }

        public void Add(int value)
        {
            if (currentLength == this.MaxLength)
            {
                throw new Exception("this array has full.");
                return;
            }
            intArray[currentLength] = value;
            currentLength++;
        }

        public void Remove()
        {
            if (currentLength == 0)
            {
                throw new Exception("this array is empty.");
            }
            currentLength--;
        }

        public int GetAt(int index)
        {
            if (index > currentLength)
            {
                throw new Exception("Out of region.");
            }
            return intArray[index];
        }

        public void Display()
        {
            for (int i = 0; i < currentLength; i++)
            {
                Console.WriteLine(intArray[i]);
            }
            Console.Read();
        }

        private void Swap(int index)
        {
            int tempValue = intArray[index];
            if (intArray[index] > intArray[index + 1])
            {
                intArray[index] = intArray[index + 1];
                intArray[index + 1] = tempValue;
            }
        }

        public void SortByInsert()
        {
            for (int i = 1; i < currentLength; i++)
            {
                int currentValue = intArray[i];
                int j;
                for (j = i; j > 0; j--)
                {
                    if (intArray[j - 1] > currentValue)
                    {
                        intArray[j] = intArray[j - 1];                        
                    }
                    else
                    {
                        break;
                    }
                }
                intArray[j] = currentValue;
            }
        }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace CSharpDataStructure
{
    public class LinkedNode
    {
        public object Value { set; get; }

        public LinkedNode NextNode { set; get; }

        private LinkedNode()
        {}

        public LinkedNode(object value, LinkedNode nextNode)
        {
            this.Value = value;
            this.NextNode = nextNode;
        }
    }

    public class LinkedList
    {
        public LinkedNode FirstNode {private set; get;}

        public LinkedNode LastNode { private set; get; }

        public LinkedList()
        {
            this.FirstNode = null;
            this.LastNode = null;
        }

        public bool IsEmpty()
        {
            lock (this)
            {
                if (this.FirstNode == null)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
        }

        public void InsertAtFront(object value)
        {
            lock (this)
            {
                if (IsEmpty())
                {
                    this.FirstNode = new LinkedNode(value, null);
                    this.LastNode = this.FirstNode;
                }
                else
                {
                    this.FirstNode = new LinkedNode(value, this.FirstNode);
                }
            }
        }

        public void Add(object value)
        {
            lock (this)
            {
                if (IsEmpty())
                {
                    this.FirstNode = new LinkedNode(value, null);
                    this.LastNode = this.FirstNode;
                }
                else
                {
                    this.LastNode.NextNode = new LinkedNode(value, null);
                    this.LastNode = this.LastNode.NextNode;
                }
            }
        }

        public void RemoveAtFirst()
        {
            lock (this)
            {
                if (IsEmpty())
                {
                    throw new Exception("LinkedList is empty.");
                }

                if (this.FirstNode == this.LastNode)
                {
                    this.FirstNode = null;
                    this.LastNode = null;
                }
                else
                {
                    this.FirstNode = this.FirstNode.NextNode;
                }
            }
        }

        public void RemoveAtLast()
        {
            lock (this)
            {
                if (IsEmpty())
                {
                    throw new Exception("LinkedList is empty.");
                }

                if (this.FirstNode == this.LastNode)
                {
                    this.FirstNode = null;
                    this.LastNode = null;
                }
                else
                {
                    LinkedNode currentNode = this.FirstNode.NextNode;
                    while (currentNode.NextNode != this.LastNode)
                    {
                        currentNode = currentNode.NextNode;                      
                    }
                    this.LastNode = currentNode;
                    this.LastNode.NextNode = null;
                }
            }
        }

        public void Insert(object value, int index)
        {
            lock (this)
            {
                if (index > Count)
                {
                    throw new Exception("Out of index.");
                }

                if (index == 0)
                {
                    this.FirstNode = new LinkedNode(value,this.FirstNode);
                    return;
                }

                if (index == this.Count)
                {
                    LinkedNode insertNode = new LinkedNode(value,null);
                    this.LastNode.NextNode = insertNode;
                    this.LastNode = insertNode;
                    return;
                }

                LinkedNode currentNode = this.FirstNode;
                int i = 0;
                while (currentNode.NextNode != null)
                {
                    if (i + 1 == index)
                    {
                        LinkedNode insertNode = new LinkedNode(value, currentNode.NextNode);
                        currentNode.NextNode = insertNode;
                        return;
                    }
                    i++;
                    currentNode = currentNode.NextNode;
                }
            }
        }

        public void Remove(int index)
        {
            lock (this)
            {
                if (index > Count)
                {
                    throw new Exception("Out of index.");
                }

                if (index == 0)
                {
                    this.FirstNode = this.FirstNode.NextNode;
                    return;
                }

                if (index == Count)
                {
                    LinkedNode tempNode = this.FirstNode.NextNode;
                    while (tempNode.NextNode != this.LastNode)
                    {
                        tempNode = tempNode.NextNode;
                    }
                    this.LastNode = tempNode;
                    this.LastNode.NextNode = null;
                    return;
                }

                LinkedNode currentNode = this.FirstNode;
                int i = 0;
                while (currentNode.NextNode != null)
                {
                    if (i + 1 == index)
                    {
                        currentNode.NextNode = currentNode.NextNode.NextNode;
                        return;
                    }
                    i++;
                    currentNode = currentNode.NextNode;
                }
                
            }
        }

        public void PrintLink()
        {
            lock (this)
            {
                if (IsEmpty())
                {
                    return;
                }

                LinkedNode currentNode = this.FirstNode;
                while (currentNode != null)
                {
                    Console.WriteLine(currentNode.Value.ToString());
                    currentNode = currentNode.NextNode;
                }
            }
        }

        private int count;
        public int Count
        {
            get
            {
                LinkedNode currentNode = this.FirstNode;
                while (currentNode.NextNode != null)
                {
                    count++;
                    currentNode = currentNode.NextNode;
                }
                return count;
            }
        }

        public object this[int index]
        {
            get
            {
                if (index >= this.Count)
                {
                    throw new Exception("out of region.");
                }
                LinkedNode currentNode = this.FirstNode;
                int i = 0;
                while (currentNode != null)
                {
                    if (index == i)
                    {
                        break;
                    }
                    i++;
                    currentNode = currentNode.NextNode;

                }
                return currentNode.Value;
            }
            set
            {
                if (index >= this.Count)
                {
                    throw new Exception("out of region.");
                }
                int i = 0;
                LinkedNode curentNode = this.FirstNode;
                while (curentNode != null)
                {
                    if (i == index - 1)
                    {
                        curentNode.Value = value;
                    }
                    curentNode = curentNode.NextNode;
                    i++;
                }        
            }
        }

       
 
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace CSharpDataStructure
{
    public class LoopQueue
    {
        private int maxSize;
        private int last;
        private int first;
        private int[] intArray;
        public int Length {private set; get; }

        private LoopQueue()
        {
        }

        public LoopQueue(int max)
        {
            this.maxSize = max;
            this.last = -1;
            this.first = 0;
            this.Length = 0;
            this.intArray = new int[max];
        }

        public void Insert(int value)
        {
            if (IsFull())
            {
                throw new Exception("Queue is full.");
            }
            if (this.last == maxSize - 1 )
            {
                this.last = -1;
            }
            this.last++;
            this.intArray[last] = value;
            this.Length++;
        }

        public int Remove()
        {
            if (IsEmpty())
            {
                throw new Exception("Queue is empty.");
            }
            if (this.first == maxSize - 1)
            {
                this.first = -1;
            }
            this.first++;
            this.Length--;
            return intArray[first];
        }

        public int PeekFront()
        {
            return intArray[last];
        }

        public int Peek()
        {
            this.Length--;
            this.first++;
            return intArray[first-1];
        }

        public bool IsEmpty()
        {
            return (this.Length == 0);
        }

        public bool IsFull()
        {
            return (this.Length == this.maxSize);
        }

       
    }
}


 using System;

namespace CSharpDataStructure
{
    /// <summary>
    /// Summary description for ջ.
    /// </summary>
    public class MyStack
    {
        int top;
        int max;
        private int[] intArray;
        public MyStack(int max)
        {
            top = -1;
            this.max = max;
            intArray = new int[max];
        }

        public void Push(int obj)
        {
            top ++;
            if (top >= max)
            {
                throw new Exception("Stack is full.");
            }
            intArray[top] = obj;
        }

        public int Peek()
        {
            return intArray[top];
        }

        public int Pop()
        {
            top --;
            if ( top + 1 < 0) {
                throw new Exception("Stack is empty.");
            }
            return intArray[top + 1];
        }

        public bool IsEmpty()
        {
            return top == -1;
        }

        public bool IsFull()
        {
            return top == max - 1;
        }

        public int Size
        {
            get
            {
                return top + 1;     
            }
        }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace CSharpDataStructure
{
    public class SelectSort
    {
        private int currentLength;
        public int MaxLength { private set; get; }
        private int[] intArray;

        private SelectSort()
        {
        }

        public int Count
        {
            get
            {
                return currentLength;
            }
        }
        public SelectSort(int maxLength)
        {
            intArray = new int[maxLength];
            this.MaxLength = maxLength;
            this.currentLength = 0;
        }

        public void Add(int value)
        {
            if (currentLength == this.MaxLength)
            {
                throw new Exception("this array has full.");
                return;
            }
            intArray[currentLength] = value;
            currentLength++;
        }

        public void Remove()
        {
            if (currentLength == 0)
            {
                throw new Exception("this array is empty.");
            }
            currentLength--;
        }

        public int GetAt(int index)
        {
            if (index > currentLength)
            {
                throw new Exception("Out of region.");
            }
            return intArray[index];
        }

        public void Display()
        {
            for (int i = 0; i < currentLength; i++)
            {
                Console.WriteLine(intArray[i]);
            }
            Console.Read();
        }

        private void Swap(int first, int second)
        {
            int tempValue = intArray[first];
            intArray[first] = intArray[second];
            intArray[second] = tempValue;         
        }

        public void SortBySelect()
        {
            for (int i = 0; i < currentLength; i++)
            {
                int minIndex = i;
                for (int j = i; j < currentLength; j++)
                {
                    if (intArray[j] < intArray[minIndex])
                    {
                        minIndex = j;
                    }
                }
                Swap(i, minIndex);
            }         
        }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace CSharpDataStructure
{
    public class SortArray
    {
        private int[] intArray;
        public int Length { private set; get; }
        public int Max { private set; get; }

        public SortArray(int max)
        {
            intArray = new int[max];
            this.Length = 0;
            this.Max = max;
        }

        private int BisectionSearch(int value)
        {       
            int lowerBound = 0;
            int upperBound = this.Length - 1;
            while (true)
            {
                int curentIndex = (lowerBound + upperBound)/2;

                if (lowerBound > upperBound)
                {
                    return lowerBound;
                }
                if (intArray[curentIndex] == value)
                {  
                    return curentIndex;  
                }
                else if (intArray[curentIndex] > value)
                {
                    upperBound = curentIndex - 1;
                }
                else if (intArray[curentIndex] < value)
                {
                    lowerBound = curentIndex + 1;  
                }
            }
        }


        public void Add(int value)
        {
            if (this.Length == 0)
            {
                intArray[0] = value;
                this.Length++;
                return;
            }
            if (this.Length >= this.Max - 1)
            {
                throw new Exception("Array is full");
            }

            int position = BisectionSearch(value);
 
            for (int i = this.Length; i > position; i--)
            {
                intArray[i] = intArray[i - 1];
            }
            intArray[position] = value;
            this.Length++;
        }

        public void Remove(int value)
        {
            if (this.Length == 0)
            {
                throw new Exception("Array is empty");
            }

            int position = BisectionSearch(value);
           
            if (position == -1)
            {
                return;
            }
            for (int i=position; i<this.Length-1; i++)
            {
                intArray[i] = intArray[i + 1];
            }
            this.Length--;
        }

        public void Display()
        {
            for (int i = 0; i < this.Length; i++)
            {
                Console.WriteLine(intArray[i].ToString());
            }
            Console.Read();
        }

        public int this[int index]
        {
            set
            {
                Add(value);
            }
            get { return intArray[index]; }
        }
    }
}


 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace CSharpDataStructure
{
    class Program
    {
        static void Main(string[] args)
        {
            //TestBobbleSort();
            //TestInsertSort();
            //TestSelectOrder();
            //TestSortArray();
            //TestLoopQueue();
            TestLinkNode();
        }

        private static void TestBobbleSort()
        {
            BubbleSort mySort = new BubbleSort(10);
            mySort.Add(4);
            mySort.Add(6);
            mySort.Add(6);
            mySort.Add(3);
            mySort.Add(6);
            mySort.Add(7);
            mySort.Add(9);
            mySort.Add(5);
            mySort.Add(1);
            //mySort.SortByBobble(mySort.Count);
            mySort.SortByBobble();
            mySort.Display();
        }

        private static void TestInsertSort()
        {
            InsertSort mySort = new InsertSort(10);
            mySort.Add(4);
            mySort.Add(6);
            mySort.Add(6);
            mySort.Add(3);
            mySort.Add(6);
            mySort.Add(7);
            mySort.Add(9);
            mySort.Add(5);
            mySort.Add(1);
            mySort.SortByInsert();
            mySort.Display();
        }

        private static void TestSelectOrder()
        {
            SelectSort mySort = new SelectSort(10);
            mySort.Add(4);
            mySort.Add(6);
            mySort.Add(6);
            mySort.Add(3);
            mySort.Add(6);
            mySort.Add(7);
            mySort.Add(9);
            mySort.Add(5);
            mySort.Add(1);
            mySort.SortBySelect();
            mySort.Display();
        }

        private static void TestSortArray()
        {
            SortArray mySort = new SortArray(10);
            mySort.Add(4);
            mySort.Add(6);
            mySort.Add(6);
            mySort.Add(3);
            mySort.Add(6);
            mySort.Add(7);
            mySort.Add(9);
            mySort.Add(5);
            mySort.Add(1);
            mySort.Remove(5);
            mySort.Remove(6);
            mySort.Display();
        }

        private static void TestLoopQueue()
        {
            LoopQueue queue = new LoopQueue(5);
            queue.Insert(1);
            queue.Insert(2);
            queue.Insert(3);
            queue.Insert(4);
            queue.Insert(5);
            int value = queue.Peek();
            value = queue.Peek();
            value = queue.Peek();
            queue.Insert(6);
            queue.Insert(7);
        }

        private static void TestLinkNode()
        {
            LinkedList linkList = new LinkedList();
            //linkList.InsertAtFront(1);
            linkList.Add(1);
            linkList.Add(2);
            linkList.Add(3);
            linkList.Add(4);
            linkList.Add(5);
            linkList.Add(6);
            linkList.Add(7);
            linkList.Add(8);
            linkList.Add(9);
            Console.WriteLine(string.Format("Count : {0}", linkList.Count));
            linkList.RemoveAtFirst();
            linkList.RemoveAtLast();
            Console.WriteLine(string.Format("The No.1 is: {0}", linkList[0]));
            linkList.PrintLink();

            linkList[3] = "a";
            linkList.PrintLink();

            linkList.Insert("Archer", 7);
            linkList.PrintLink();

            linkList.Remove(0);
            linkList.Remove(4);
            linkList.Remove(5);
            linkList.PrintLink();
            Console.Read();
        }

    }
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted on 2008-11-27 20:03  衣不如新  阅读(982)  评论(2编辑  收藏  举报