C#——数据结构(二)

1.Stack(先进后出)LIFO

只能在栈顶进行元素的插入和删除;

顺序栈

内部有一个ArrayList作为储存器,p_Index永远指向栈顶;

Push入栈

这里写图片描述

Pop出栈

这里写图片描述

Top(peek)

return list[p_Index];

复杂度:
  • 当内部list容量够用时,不需要增大容量的情况下,入栈Push为O(1),反之为O(n);
  • 出栈始终为O(1);

链栈

实质上是一种单链表,但只能在链表一个位置插入和删除;

Push

这里写图片描述

newNode.Next=top;
top=newNode;
Pop
top.next=top;

2.Queue(先进先出)FIFO

只能在队列的队头Head删除,在队尾Tail插入;

顺序队列

内部ArrayList作为储存器,当队列容量不够时,长度双倍增长;

EnQueue入队列

这里写图片描述
list.Add(item);

UnQueue出队列

list.RemoveAt(0);

   /// 泛型顺序队列
    class MyQueue<T>
    {
        List<T> list;
        public MyQueue()
        {
            list = new List<T>();
        }
        //入队
        public void  EnQueue(T item)
        {
            list.Add(item);
        }
        //出队
        public void UnQueue()
        {
            if(list.Count>0)
                list.RemoveAt(0);
        }
    }

链队(待更新)


3.二叉树

子节点最多2个;
这里写图片描述
二叉查找树:左结点小,右结点大;

深度遍历:

public void PreOrder(Node root)    //先序(中左右)
{
    if(!root==null)
    {
        Console.WirteLine(root);
        PreOrder(root.left);    
        PreOrder(root.right);
    }
}
public void InOrder(Node root)    //中序(左中右)
{
    if(!root==null)
    {
        InOrder(root.left);
        Console.WirteLine(root);
        InOrder(root.right);
    }
}
public void PostOrder(Node root)    //后序(左右中)
{
    if(!root==null)
    {       
        PostOrder(root.left);   
        PostOrder(root.right);
        Console.WirteLine(root);
    }
}
给树求遍历顺序

这里写图片描述
先序:ABDGEHCF
中序:GDBEHACF
后序:GDHEBFCA

知道两序求另外一序(必须知道中序)

这里写图片描述
知道中序和另外一序可以确定根结点A;
分成两段之后,再找出根结点B;
一直分段,就可以画出树,从而得出后序;

猜你喜欢

转载自blog.csdn.net/noEnoughChief/article/details/82290124