链栈以及链队列的实现

链队列的实现:只有入队以及出队

  class QueueLink<T> //链队列
    {
        public int count;
        public Node<T> front;//头节点
        public Node<T> rear;//尾节点      
        public QueueLink() {
            front = null;
            rear = null;
            count = 0;
        }
        public void Enqueue(T value) {//入队
            Node<T> newNode = new Node<T>(value);
            if (count == 0) {
                front = newNode;
                rear =newNode;  
                count=1;
            }
            else
            {
                rear.Next = newNode;
                rear = newNode;
                count++;
            }
        }
        public T Dequeqe() { //出队
            Node<T> temp = front;
            if (count == 0)
            {
                return default(T);
            }
            else if (count == 1)
            {
                front = null;
                rear = null;
                count = 0;
            }
            else {
                front = front.Next;
                count--;
            }
            return temp.Value;
        }
        //获取头节点的值
        public T Peek(){
            if(front!=null){
                return front.Value;
            }else{
                return default(T);
        }
//链栈的实现
  class StackLink<T>
    {
        private int count;
        public int Count {
            get { return count; }
            set { count = value; }
        }
        private T data;
        public T Data {
            get { return data; }
            set { data = value; }
        }
        private Node<T> head;
        public Node<T> Head {
            get { return head; }
            set { head = value; }
        }
        public StackLink(){
            data = default(T);
            head = null;
            count = 0;
        }
        public StackLink(T value) {
            data = value;
        }
        public StackLink(Node<T> node) {
            head = node;
        }
        public StackLink(Node<T> node, T value) {
            data = value;
            head = node;
        }   
         public T Peek() {//返回栈顶元素的值
            if (head!= null)
            {
                Node<T> temp = head;
                for (int i = 1; i <count; i++)
                {
                    temp = temp.Next; //遍历到前一个元素
                }
                return temp.Value;
            }
            else {
                return default(T);
            }
        }

        public void Push(T value)//添加元素
        {
            Node<T> newNode =new Node<T>(value);
            if (count == 0)
            {
                head = newNode;
                count++;
            }
            else { 
                Node<T> temp =head;
                for (int i = 1; i < count; i++) {
                    temp = temp.Next; //遍历到前一个元素
                }
                temp.Next = newNode;
                count++;
            }
            }   

        public T Pop() {//移除栈顶的元素并返回栈顶元素
            if (count == 0)
            {
                return default(T);
            }
            else
            {
                if (count == 1)
                {
                    Node<T> temp = head;
                    head = null;
                    count--;
                    return temp.Value;
                }
                else
                {
                    Node<T> temp = head;
                    for (int i = 1; i < count-1; i++)
                    {
                        temp = temp.Next; //遍历到前一个元素
                    }
                    T value=temp.Next.Value;
                    temp.Next = null;
                    count--;
                    return value;
                }
            }
        }
        }

//自己设计的Node类

class Node
{
private T value;
public T Value{ //属性
get { return value; }
set { this.value = value; }
}
private Node next;
public Node Next {//节点引用
get { return next; }
set { next = value; }
}
//以下为该类的构造方法
public Node(T value) {
this.value = value;
next = null;
}
public Node(T value, Node node) {
next = node;
this.value = value;
}
public Node() {
value = default(T);
next = null;
}
public Node(Node node) {
value = default(T);
next = node;
}
}
“`

猜你喜欢

转载自blog.csdn.net/qq_36561650/article/details/81085738