C#——数据结构(二)栈、队列、二叉树

本文介绍了C#中的数据结构,包括栈(顺序栈和链栈)、队列(顺序队列)以及二叉树的深度遍历。详细讲解了各个操作的实现和时间复杂度,特别提到了二叉查找树及其遍历顺序的推导方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;
一直分段,就可以画出树,从而得出后序;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值