判断栈是否为空_【C#数据结构系列】栈和队列

本文详细介绍了栈和队列这两种操作受限的线性表,包括它们的定义、基本运算,以及在C#中的实现。栈遵循后进先出(LIFO)原则,主要操作在栈顶进行;队列遵循先进先出(FIFO)原则,插入在队尾,删除在队头。栈和队列的存储结构包括顺序栈、链栈、顺序队列和循环队列,C#中提供了泛型Stack和Queue类来支持这两种数据结构。
摘要由CSDN通过智能技术生成

 一:栈

  栈和队列也是线性结构,线性表、栈和队列这三种数据结构的数据元素以及数据元素间的逻辑关系完全相同,差别是线性表的操作不受限制,而栈和队列的操作受到限制。栈的操作只能在表的一端进行,队列的插入操作在表的一端进行而其它操作在表的另一端进行,所以,把栈和队列称为操作受限的线性表。

1:栈的定义及基本运算

  栈(Stack)是操作限定在表的尾端进行的线性表。表尾由于要进行插入、删除等操作,所以,它具有特殊的含义,把表尾称为栈顶(Top),另一端是固定的,叫栈底(Bottom)。当栈中没有数据元素时叫空栈(Empty Stack)。

  栈通常记为:S= (a 1 ,a 2 ,…,a n ),S是英文单词stack的第 1 个字母。a 1 为栈底元素,a n 为栈顶元素。这n个数据元素按照a 1 ,a 2 ,…,a n 的顺序依次入栈,而出栈的次序相反,a n 第一个出栈,a 1 最后一个出栈。所以,栈的操作是按照后进先出(Last In First Out,简称LIFO)或先进后出(First In Last Out,简称FILO)的原则进行的,因此,栈又称为LIFO表或FILO表。

  3691d35b93441c006751262bef61f431.png

  由于栈只能在栈顶进行操作,所以栈不能在栈的任意一个元素处插入或删除元素。因此,栈的操作是线性表操作的一个子集。栈的操作主要包括在栈顶插入元素和删除元素、取栈顶元素和判断栈是否为空等。

  栈的接口定义如下所示:

0492ea59f6c8a3bfada97f6b4469ab5a.png

d99bbe6e1b233c255fb07d698542affb.png

1 public interface IStack2 {
    3     int GetLength(); //求栈的长度4     bool IsEmpty(); //判断栈是否为空5     void Clear(); //清空操作6     void Push(T item); //入栈操作7     T Pop(); //出栈操作8     T GetTop(); //取栈顶元素9 }

d99bbe6e1b233c255fb07d698542affb.png

2:栈的存储和运算实现

1、顺序栈:

  用一片连续的存储空间来存储栈中的数据元素,这样的栈称为顺序栈(Sequence Stack)。类似于顺序表,用一维数组来存放顺序栈中的数据元素。

550cd57cabf2b57306acd08433b7bf7d.png

  顺序栈类 SeqStack的实现说明如下所示。

0492ea59f6c8a3bfada97f6b4469ab5a.png

d99bbe6e1b233c255fb07d698542affb.png

  1 public class SeqStack : IStack  2     {
      3         private int maxsize; //顺序栈的容量  4         private T[] data; //数组,用于存储顺序栈中的数据元素  5         private int top; //指示顺序栈的栈顶  6         //索引器  7         public T this[int index]  8         {
      9             get 10             {
     11                 return data[index]; 12             } 13             set 14             {
     15                 data[index] = value; 16             } 17         } 18         //容量属性 19         public int Maxsize 20         {
     21             get 22             {
     23                 return maxsize; 24             } 25             set 26             {
     27                 maxsize = value; 28             } 29         } 30         //栈顶属性 31         public int Top 32         {
     33             get 34             {
     35                 return top; 36             } 37         } 38         //构造器 39         public SeqStack(int size) 40         {
     41             data = new T[size]; 42             maxsize = size; 43             top = -1; 44         } 45         //求栈的长度 46         public int GetLength() 47         {
     48             return top + 1; 49         } 50         //清空顺序栈 51         public void Clear() 52         {
     53             top = -1; 54         } 55         //判断顺序栈是否为空 56         public bool IsEmpty() 57         {
     58             if (top == -1) 59             {
     60                 return true; 61             } 62             else 63             {
     64                 return false; 65             } 66         } 67         //判断顺序栈是否为满 68         public bool IsFull() 69         {
     70             if (top == maxsize - 1) 71             {
     72                 return true; 73             } 74             else 75             {
     76                 return false; 77             } 78         } 79         //入栈 80         public void Push(T item) 81         {
     82             if (IsFull()) 83             {
     84                 Console.WriteLine("Stack is full"); 85                 return; 86             } 87             data[++top] = item; 88    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值