天天看點

C# 資料結構

Array,ArrayList,List<T>,LinkedList<T>,Queue<T>,Stack<T>,Dictionary<K,T>

1、Array

    初始化時确定空間占用,無法增加元素個數。

static void Main(string[] args)
        {
            int[] array = new int[5] { 3,2,1,5,4};//固定容量,建立後無法新增元素
            array[0] = 0;//删除元素,直接指派0
            array[1] = 6;//改元素,直接指派
            for (int i = 0; i < array.Length; i++)
            {
                Console.WriteLine(array[i]);//查元素
            }
            Console.ReadLine();
        }           

2、ArrayList

    所有元素均為Object,是以存在很多裝箱拆箱,大量資料時會很耗性能。

static void Main(string[] args)
        {
            ArrayList list = new ArrayList(new int[5] { 1,2,3,4,5});
            list.Add(6);//增加元素
            list.AddRange(new int[2]{ 7,8});//按範圍增加多個元素
            list.Remove(1);//删除元素
            list.RemoveAt(2);//按下标删除元素
            list[0] = 100;//改
            for (int i = 0; i < list.Count; i++)
            {
                Console.WriteLine(list[i]);//查
            }
            Console.ReadLine();
        }           

3、List<T>

    泛型可以在建立是确定需要的類型,避免了ArrayList中裝箱拆箱的操作。

static void Main(string[] args)
        {
            List<int> list = new List<int>();
            list.Add(1);//增加元素
            list.AddRange(new int[2]{ 2,3});//按範圍增加多個元素
            list.Remove(1);//删除元素
            list[0] = 100;//改
            for (int i = 0; i < list.Count; i++)
            {
                Console.WriteLine(list[i]);//查
            }
            Console.ReadLine();
        }           

4、LinkedList<T>

    MSDN:點選打開連結

    連結清單在記憶體中不是連續存儲。

  • 向連結清單中插入或删除節點無需調整結構的容量。添加和删除速度比數組快。
  • 連結清單适合在需要有序的排序的情境下增加新的元素。例如要在數組中間某個位置增加新的元素,數組需要移動很多元素, 連結清單隻需調整添加位置兩邊的元素指向即刻。
  • 由于其在記憶體空間中不一定是連續排列,是以通路時候無法利用下标,而是必須從頭結點開始,逐次周遊下一個節點直到尋找到目标。是以當需要快速通路對象時,數組無疑更有優勢。
static void Main(string[] args)
        {
            LinkedList<int> list = new LinkedList<int>();
            list.AddFirst(1);//增加開始位置元素
            list.AddLast(2);//增加末尾位置元素
            list.AddLast(3);
            list.RemoveFirst();//删除開始位置元素
            list.Remove(3);//删除指定元素
            
            foreach (var item in list)
            {
                Console.WriteLine(item);
            }
            Console.ReadLine();
        }           

5、Queue<T>

    隊列:先進先出。MSDN:點選打開連結

static void Main(string[] args)
        {
            Queue<int> queue = new Queue<int>();
            queue.Enqueue(1);//增加元素到隊尾
            queue.Enqueue(2);
            queue.Enqueue(3);
            queue.Dequeue();//删除隊首元素,最先加入到隊列中的元素
            //Console.WriteLine(queue.Peek()); 查詢隊列首位元素,但不移除該元素

            foreach (var item in queue)
            {
                Console.WriteLine(item);
            }
            Console.ReadLine();
        }           

6、Stack<T>

    MSDN:點選打開連結

    與Queue<T>類似,這裡是先進後出。

static void Main(string[] args)
        {
            Stack<int> stack = new Stack<int>();
            stack.Push(1);//增加元素
            stack.Push(2);
            stack.Push(3);
            stack.Pop();//删除最後末尾元素
            //int sum = stack.Sum();//求和
            //int num = stack.Peek();//傳回最頂部元素,不移除

            foreach (var item in stack)
            {
                Console.WriteLine(item);
            }
            Console.ReadLine();
        }           

7、Dictionary<K,T>

    MSDN:點選打開連結

static void Main(string[] args)
        {
            Dictionary<string, int> dic = new Dictionary<string, int>();
            dic.Add("A", 1);//增
            dic.Add("B", 2);
            dic.Add("C", 3);
           // dic.Remove("A");//删
            dic["B"] = 4;//改
            foreach (var item in dic)
            {
                Console.WriteLine(item);
            }
            Console.ReadLine();
        }           

8、總結

C# 資料結構