c#之链栈

来源:互联网 发布:民治c语言培训 编辑:程序博客网 时间:2024/05/14 19:05

1,创建链栈的节点  LinkNode

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace 栈{    /// <summary>    /// 链栈的节点    /// </summary>    /// <typeparam name="T"></typeparam>    class LinkNode<T>    {        private T data;//存储数据        private LinkNode<T> next;//指向下一节点        public LinkNode()        {            data = default(T);            next = null;        }        public LinkNode(T data)        {            this.data = data;            next = null;        }        public LinkNode(T data, LinkNode<T> next)        {            this.data = data;            this.next = next;        }        public LinkNode(LinkNode<T> next)        {            this.next = next;            data = default(T);        }        public T Data { get { return data; } set { data = value; } }        public LinkNode<T> Next { get { return next; } set { next = value; } }    }}

2,创建栈的接口   

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace 栈{    //数序栈    interface ISeqStack<T>    {        int Count { get; }//元素个数(属性)        int GetLenth();//栈的长度(方法)        bool IsEmpty();//栈是否为空        void Clear();//清空栈        void Push(T item);//入栈        T Pop();//出栈        T PeekTop();//取得栈顶元素    }}

3,创建链栈

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace 栈{    class LinkStack<T> : ISeqStack<T>    {        private LinkNode<T> top;//栈顶元素节点        private int count = 0;//记录栈的元素个数        /// <summary>        /// 栈中元素的个数        /// </summary>        public int Count        {            get { return count; }        }        public int GetLenth()        {            return count;        }        public bool IsEmpty()        {            return count == 0;        }        public void Clear()        {            count = 0;            top = null;        }        public void Push(T item)        {            //栈顶元素            LinkNode<T> newNode = new LinkNode<T>(item);            newNode.Next = top;            top = newNode;            count++;        }        public T Pop()        {            T data = top.Data;            top = top.Next;            count--;            return data;        }        public T PeekTop()        {            return top.Data;        }    }}
4,测试链栈

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace 栈{    class Program    {        static void Main(string[] args)        {            //ISeqStack<char> s = new SeqStack<char>(30);            ISeqStack<char> s = new LinkStack<char>();            s.Push('a');            s.Push('b');            s.Push('c');            s.Push('d');            Console.WriteLine("元素 a,b,c,d  入栈之后,栈的元素个数:" + s.Count + "  栈的长度:" + s.GetLenth());            Console.WriteLine("栈顶元素:" + s.PeekTop()); s.PeekTop();            Console.WriteLine("元素 " + s.Pop() + " 出栈之后,栈顶元素:" + s.PeekTop());            Console.WriteLine("元素 " + s.Pop() + " 出栈之后,栈顶元素:" + s.PeekTop());            s.Push('e');            s.Push('f');            s.Push('g');            Console.WriteLine("元素 e,f,g  入栈之后,栈的元素个数:" + s.Count + "  栈顶元素:" + s.PeekTop());            Console.WriteLine("元素 " + s.Pop() + ", " + s.Pop() + " 出栈之后,栈顶元素:" + s.PeekTop());            s.Clear();            Console.WriteLine("清空栈之后,栈的元素个数:" + s.Count + "  栈的长度:" + s.GetLenth());            Console.ReadKey();        }    }}
5,运行结果






0 0
原创粉丝点击