C# 数据结构-链表(自练习)

链表 (Linked List)
  是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域

 

 

 

 

namespace Queue

{

    /// <summary>

    /// Implement Queue in Array.

    /// </summary>

    class Queue

    {

        private int[] items;

        private int count;

 

        /// <summary>

        /// Initial Queue.

        /// </summary>

        /// <param name="capability"></param>

        public Queue(int capability)

        {

            //capability should always bigger than 0.

            if (capability > 0)

                items = new int[capability];

            else

                throw new IndexOutOfRangeException("Array should be more than 0.");

            this.count = 0;

        }

        /// <summary>

        /// Add Item at the end of Queue.

        /// </summary>

        /// <param name="item"></param>

        public void EnQueue(int item)

        {

            MoveAllNext();

            items[0] = item;

            this.count++;

        }       

        /// <summary>

        /// Delete item at the front of Queue.

        /// Return the deleted item of Queue.

        /// </summary>

        /// <returns></returns>

        public int DeQueue()

        {

            int temp = items[count - 1];

            items[count - 1] = 0;

            count--;

            return temp;           

        }

        /// <summary>

        /// Return the front item of Queue without deleting.

        /// </summary>

        /// <returns></returns>

        public int Peek()

        {

            if (count > 0 && count <= items.Length)

                return items[count - 1];

            else

                throw new IndexOutOfRangeException("Count is out of Array Range.");

        }

        /// <summary>

        /// If Queue is Full, return true.

        /// </summary>

        /// <returns></returns>

        public bool IsFull()

        {

            return this.count == items.Length ? true : false;

        }

        /// <summary>

        /// If Queue is Empty, return true.

        /// </summary>

        /// <returns></returns>

        public bool IsEmpty()

        {

            return this.count == 0 ? true : false; ;

        }

        /// <summary>

        /// Move All Items in Array to next sequently.

        /// the last element in Array will move out of Array.

        /// </summary>

        private void MoveAllNext()

        {

            if (count == 0)

                return;

            else if (count > 0 && count <= items.Length)

            {

                int[] temp = new int[items.Length];

                temp[0] = 0;

                for (int i = 1; i < count; i++)

                {

                    temp[i] = items[i - 1];

                }

                items = temp;

            }

            else

                throw new IndexOutOfRangeException("Count is out of Array Range.");

        }

        /// <summary>

        /// Move All Items in Array to front sequently.

        /// the original element in Array will be over writed.

        /// </summary>

        private void MoveAllFront()

        {

            if (count == 0)

                return;

            else if (count > 0 && count <= items.Length)

            {

                int[] temp = new int[items.Length];               

                for (int i = 1; i < count; i++)

                {

                    temp[i - 1] = items[i];

                }

                items = temp;

            }

            else

                throw new IndexOutOfRangeException("Count is out of Array Range.");

        }       

    }

}

 

namespace LinkList

{

    class LinkList

    {

        private int count;

        private Node current;

        private Node first;

        private Node last;

 

        public LinkList()

        {

            count = 0;

        }

 

        public LinkList(Node node)

        {

            this.current = node;

            this.first=node;

            count = 0;

            Node temp = node;

            while (temp != null)

            {

                this.last = temp;

                temp = temp.next;

                count++;

            }

        }

        public int Count

        {

            get { return Count; }

        }

        /// <summary>

        /// First Node

        /// </summary>

        public Node First

        {

            get

            {

                //if fist is null

                if (first == null)

                    throw new NullReferenceException("first node is null");

                else

                    return first;

            }

        }

        /// <summary>

        /// Last Node

        /// </summary>

        public Node Last

        {

            get

            {

                //if fist is null

                if (last == null)

                    throw new NullReferenceException("last node is null");

                else

                    return last;

            }

        }

        /// <summary>

        /// Get specific vaule node;

        /// </summary>

        /// <param name="value"></param>

        /// <returns></returns>

        public Node Find(int value)

        {

            return null;

        }

        /// <summary>

        /// Remove specific value node;

        /// </summary>

        /// <param name="vaule"></param>

        /// <returns></returns>

        public bool Remove(int vaule)

        {

            return true;

        }

        /// <summary>

        /// Clear node;

        /// </summary>

        public void Clear()

        { }

        /// <summary>

        /// Add node at last Link List and return new node value;

        /// </summary>

        /// <param name="node"></param>

        /// <returns></returns>

        public Node AddLast(Node node)

        {

            return null;

        }

    }

    class Node

    {

        public Node(int data)

        {

            this.Data = data;

        }

        public Node next;

        public int Data;

    }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值