数据结构之链表

本文介绍了一个简单的单链表实现,包括链表节点类定义、链表类实现及相关接口设计。主要内容涵盖链表的基本操作,如添加元素、删除指定位置元素等。

数据结构——链表

链表节点类

namespace 单链表
{
    class Node<T>
    {
        private T date;
        private Node<T> next;

        public Node()
        {
            date = default(T);
        }

        public Node(T value, Node<T> next)
        { 
            this.date = value;
            this.next = next;
        }

        public Node(T value)
        {
            this.date = value;
            this.next = null;
        }

        public Node(Node<T> next)
        {
            this.next = next;
            this.date = default(T);
        }

        public T Date
        {
            get { return date; }
            set { date = value; }
        }
        
        public Node<T> Next
        {
            get { return next; }
            set { next = value; }
        }
    }
}

  1. 相关接口
namespace 单链表
{
    interface Interface1<T>
    {
        int GetLength();
        void Clear();

        bool IsEmpty();

        void Add(T item);

        void Insert(T item, int index);

        void Delegate(int index);

        T this[int index] { get; }

        T GetEle(int index);

        int Locate(T value);
    }
}

链表类

namespace 单链表
{ 
    class linkList<T> : Interface1<T>
    {      
        private Node<T> head = new Node<T>();
        public linkList()
        {
            head = null;
        }
        public T this[int index]
        {
            get
            {
                Node<T> tempNode =head;
                for(int i=1;i<=index;i++)
                {
                    tempNode = tempNode.Next;

                }
                return tempNode.Date;

            }
         
        }


        public void Add(T item)
        {
            Node<T> newNode = new Node<T>(item);
            if (head == null)
            {
                head = newNode;

            }

            else
            {
                Node<T> tempNode = new Node<T>();

                tempNode = head;

                while(true)
                {
                    if (tempNode.Next != null)
                    {
                        tempNode = tempNode.Next;
                    }

                    else
                    {
                        break;
                    }
                }

                tempNode.Next = newNode;
            }
          
        }

        public void Clear()
        {
            throw new NotImplementedException();
        }

        public void Delegate(int index)
        {
            T date = default(T);

            if(index==0)
            {
                date = head.Date;
                head = head.Next;

            }

            else
            {
                Node<T> tempNode =head;

                Node<T> preNode = new Node<T>();
                Node<T> curNode = new Node<T>();

                for (int i=1;i<=index-1;i++)
                {    
                     tempNode = tempNode.Next;
                }


                preNode = tempNode;

                curNode = tempNode.Next.Next;

               
                preNode.Next = curNode;

            }
        }

        public T GetEle(int index)
        {
            return this[index];
        }

        public int GetLength()
        {
            Node<T> tempNode = head;
            int count = 1;
            while(true)
            {
                tempNode = tempNode.Next;
                if(tempNode!=null)
                {
                    count++;
                }

                else
                {
                    break;
                }
            }

            return count;



        }

        public void Insert(T item, int index)
        {
            Node<T> newNode = new Node<T>(item);

            if(index == 0)
            {
                newNode.Next = head;
                head = newNode;
            }
            else
            {
                Node<T> tempNode =head;
                for(int i=1;i<=index-1;i++)
                {
                    tempNode = tempNode.Next;

                }
                Node<T> preNode = tempNode;
                Node<T> curNode = tempNode.Next;

                preNode.Next = newNode;
                newNode.Next = curNode;
            }

           
        }

        public bool IsEmpty()
        {
            throw new NotImplementedException();
        }

        public int Locate(T value)
        {
            throw new NotImplementedException();
        }
    }
}

主函数

namespace 单链表
{
    class Program
    {
        static void Main(string[] args)
        {
            linkList<string> list = new linkList<string>();

            list.Add("123");
            list.Add("456");
            list.Add("789");


           // Console.WriteLine(list.GetLength());

           // Console.WriteLine(list[0]);

           // list.Insert("0", 1);
            list.Delegate(2);


            for (int i=0;i<list.GetLength();i++)
            {
                Console.WriteLine(list[i]);
            }

           
            Console.ReadKey();
        }
    }
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值