数据结构

一、数组

  • 特点:

元素在内存中是连续存储,元素通过数组下标访问。

  • 优点:

随机访问效率高,通过索引直接访问。

  • 缺点:

数组初始化后大小固定,无法扩容。

只能存储一种类型数据。

添加和删除效率低,因为需要移动其他元素。

  • 适用场景:

频繁查询,对空间要求不大,添加和删除操作少。

二、链表

  • 特点:

非连续存储空间、非顺序存储的数据结构。数据元素的逻辑顺序是通过链表的指针地址实现,每个元素包含两个结点,一个是存储元素的数据域 (内存空间),另一个是指向下一个结点地址的指针域。

  • 优点:

添加和删除效率高。

无需初始化容量,可任意增减元素。

  • 缺点:

含有大量指针域,占用空间大。

随机访问效率低,需遍历链表查询。

  • 适用场景:

数据量较小,需要频繁添加和删除。

三、栈

  • 特点:

栈是一种特殊的线性表,仅能在线性表的栈顶操作。先进后出。

  • 栈的实现:

class Stack<T>
    {
        Node<T> top;    //栈顶元素

        //入栈
        public void Push(T data)
        {
            //根据当前栈顶元素新构建一个新的栈顶,并将当前栈顶的next指向原来的top
            top = new Node<T>(top, data);
        }

        //出栈
        public T Pop()
        {
            if (top == null)
                throw new InvalidOperationException();
            T remove= top.data;
            top = top.next;    //重新指定栈顶
            return remove;
        }
    }

    //节点
    class Node<T>
    {
        public Node<T> next;
        public T data;
        public Node(Node<T> sNext, T sData)
        {
            this.next = sNext;
            this.data = sData;
        }
    }

四、队列

  • 特点:

队列也是一种线性表,队列可以在一端添加元素,在另一端取出元素,也就是:先进先出。

  • 队列实现
class Queue<T>
    {
        QueueNode<T> head;    //队头
        QueueNode<T> tail;    //队尾
        //入队
        public void Push(T data)
        {
            QueueNode<T> node = new QueueNode<T>(data);
            if (head == null && tail == null)
            {
                head = node;
                tail = node;
            }
            else
            {
                tail.next = node;
                tail = node;
            }
        }
        //出队
        public T Pop()
        {
            if (head == null)
                throw new InvalidOperationException();
            T remove= head.data;
            head = head.next;
            return remove;
        }
    }
    
    //节点   
    class QueueNode<T>
    {
        public QueueNode<T> next;
        public T data;

        public QueueNode(T sData)
        {
            this.data = sData;
        }
    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值