C# 栈和队列

本文详细介绍了C#中栈和队列这两种重要的数据结构,包括它们的概念、特点、操作原理以及在软件设计中的应用。栈遵循后进先出(LIFO)原则,而队列遵循先进先出(FIFO)原则。文章讨论了顺序栈和链栈的实现,同时提供了顺序队列和链队列的详细实现方法,包括代码示例。

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

栈(deap)和队列是非常重要的两种数据结构,在软件设计中应用很多。栈和队列也是线性结构,线性表、栈和队列这三种数据结构的数据元素以及数据元素间的逻辑关系完全相同,差别是线性表的操作不受限制,而栈和队列的操作受到限制
栈的操作只能在表的一端进行(栈顶)
队列的插入操作在表的一端进行(队首)而其它操作在表的另一端进行
所以,把栈和队列称为操作受限的线性表。

栈(Stack)是操作限定在表的尾端进行的线性表。表尾由于要进行插入、删除等操作,所以,它具有特殊的含义,把表尾称为栈顶( Top),另一端是固定的,叫栈底( Bottom)。当栈中没有数据元素时叫空栈(Empty Stack)。
栈通常记为: S= (a1,a2,…,an),S是英文单词stack的第 1 个字母。a1为栈底元素,an为栈顶元素。这n个数据元素按照a1,a2,…,an的顺序依次入栈,而出栈的次序相反,an第一个出栈,a1最后一个出栈。所以,栈的操作是按照后进先出(Last In First Out,简称LIFO)或先进后出(First In Last Out,简称FILO)的原则进行的,因此,栈又称为LIFO表或FILO表。栈的操作示意图如图所示。
在这里插入图片描述

栈的接口定义

public interface IStackDS<T>
{
    int Count { get; }
    int GetLength();//求栈的长度
    bool IsEmpty(); //判断栈是否为空
    void Clear();//清空操作
    void Push(T item);//入栈操作
    T Pop();//出栈操作
    T Peek(); //取栈顶元素

}
顺序栈
栈的存储和代码实现
    /// <summary>
    /// 顺序栈
    /// </summary>
    /// <typeparam name="T"></typeparam>
    public class SeqStack<T> : IStackDS<T>
    {
        private T[] data;
        private int top;
        //构造函数
        public SeqStack(int size)
        {
            data = new T[size];
            top = -1;
        }
        public SeqStack() : this(10)
        {
        }

        //栈中元素个数
        public int Count
        {
            get { return top + 1; }
        }
        //清空栈
        public void Clear()
        {
            top = -1;
        }
        //获取栈的长度
        public int GetLength()
        {
            return Count;
        }
        //判断栈是否是空的
        public bool IsEmpty()
        {
            return Count == 0;
        }
        //入栈
        public void Push(T item)
        {
            data[top + 1] = item;
            top++;
        }
        //出栈
        public T Peek()
        {
            return data[top];
        }
        //出栈删除出栈元素
        public T Pop()
        {
            T temp = data[top];
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值