程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> 數據結構(C#)--單鏈表

數據結構(C#)--單鏈表

編輯:.NET實例教程

2007年最後一個月在忙碌度過了,最近在網上下了一本C#版本的數據結構的電子書,正好我也打算在把數據結構在過一遍,剛好可以看這本,還可以提高一下英文的閱讀能力。

書名是《DATA STRUCTURES AND ALGORITHMS USING C#》,作者:MICHAEL MCMILLAN

以後我會陸續把這本數的心得發上來,同時也把自己親手實踐過的代碼發上來,大家一起學習,一起進步。如果有什麼錯誤,大家可以發郵件或者留言給我。謝謝。由於該書的結構和我們一般教材的結構不是很一樣,所以我按照一般教材的順序,先從鏈表開始,原書鏈表是在第十一章才講的。書中代碼有問題的地方我會在注釋中標注出來。

 



namespace DataStruct
...{
    //定義單鏈表的表頭
    public class Node
    ...{
        //存儲數據,定義為基類,可以存不同類型的數據
        public Object Element;
        //指向下一個結點的引用
        public Node Link;

        //構造空結點
        public Node()
        ...{
            this.Element = null;
            this.Link = null;
        }
        //帶參數的構造器
        public Node(Object element)
        ...{
            this.Element = element;
            this.Link = null;
        }
    }

    public class LinkedList
    ...{
        //此處原書有誤,不應該設置為peotected,這樣會導致結點沒有實例化
        public Node Header;
        public LinkedList()
        ...{
            Header = new Node("header");
        }

        //查找鏈表中的元素
        private Node Find(Object item)
        ...{
            Node Current = new Node();
            Current = Header;
            //書中此處代碼有誤
            //while(Current.header !=item)
         while (Current.Element != item)
            ...{
                Current = Current.Link;
            }
            return Current;
        }

        //在鏈表中插入元素
        public void InsertNode(Object newItem,Object after)
        ...{
            Node Current = new Node();
            Node NewNode = new Node(newItem);
            Current = Find(after);
            if (Current != null)
            ...{
                NewNode.Link = Current.Link;
                Current.Link = NewNode;
            }
        }

        
        public Node FindPrevious(Object n)
        ...{
            Node Current = Header;
            while (!(Current.Link == null) && (Current.Link.Element != n))
            ...{
                Current = Current.Link;
            }
            return Current;
        }

        //刪除結點
        public void Remove(Object item)
        ...{
            Node P = FindPrevious(item);
            if (!(P.Link == null))
            ...{
                P.Link = P;
            }
        }

        //打印鏈表
        public void PrintList()
        ...{
            Node Current = new Node();
            Current = this.Header;
            while (Current.Link != null)
            ...{
                Console.WriteLine(Current.Link.Element);
                Current = Current.Link;
            }
        }
        
    }

    class Program
    ...{
        static void Main(string[] args)
        ...{
            //實例化結點
            Node FirstNode = new Node("Tommy");
            Node SecondNode = new Node("weiwei");
            Int32 Num = 5;
            //因為我們定義結點的時候是用object類型,所以結點可以存儲不同類型
            Node ThirdNode = new Node(Num);
            FirstNode.Link = SecondNode;
            SecondNode.Link = ThirdNode;
            ThirdNode.Link = null;
            LinkedList MyList = new LinkedList();
            //將頭結點指向第一個結點
            MyList.Header.Link = FirstNode;
            //插入結點
            MyList.InsertNode("advantech", "weiwei");
            MyList.InsertNode("插入鏈表", "Tommy");
            //打印鏈表中的結點元素
            MyList.PrintList();
            Console.ReadLine();
        }
    }
}
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved