C#数据结构与算法之栈浅析

开发 后端 算法
C#数据结构与算法之栈浅析主要向你介绍C#数据结构与算法之栈的概念和实现,栈的使用是程序的一种思路,希望本文对你有所启发。

C#数据结构与算法之栈(stack)在计算机科学中是限定仅在表尾进行插入或删除操作的线形表。它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来,它只能在某一端插入和删除的特殊线性表。用桶堆积物品,先堆进来的压在底下,随后一件一件往堆。取走时,只能从上面一件一件取。堆和取都在顶部进行,底部一般是不动的。

C#数据结构与算法之栈就是一种类似桶堆积物品的数据结构,进行删除和插入的一端称栈顶,另一堆称栈底。插入一般称为进栈(PUSH),删除则称为退栈(POP)。 栈也称为后进先出表(LIFO表)。

C#数据结构与算法之栈1、进栈(PUSH)算法

◆若TOP≥n时,则给出溢出信息,作出错处理(进栈前首先检查栈是否已满,满则溢出;不满则作②);

◆置TOP=TOP+1(栈指针加1,指向进栈地址);

◆S(TOP)=X,结束(X为新进栈的元素);

C#数据结构与算法之栈2、退栈(POP)算法

◆若TOP≤0,则给出下溢信息,作出错处理(退栈前先检查是否已为空栈, 空则下溢;不空则作②);

◆X=S(SOP),(退栈后的元素赋给X);

◆TOP=TOP-1,结束(栈指针减1,指向栈顶)。

C#数据结构与算法之栈的实现接口:

  1. public interface IStack<T>  
  2. {  
  3.     int Length();  
  4.     bool IsEmpty();  
  5.     void Clear();  
  6.     void Push(T items);  
  7.     T Pop();  
  8.     T GetPopValue();  

下面的代码是C#数据结构与算法之栈的实现的类:

  1. public class JStack<T> : IStack<T>  
  2. {  
  3.     private int size;  
  4.     private T[] item;  
  5.     private int top;   
  6.  
  7.     public T this[int index]  
  8.     {  
  9.         get { return item[index]; }  
  10.         set { item[index] = value; }  
  11.     }   
  12.  
  13.     public int Size  
  14.     {  
  15.         get { return size; }  
  16.         set { size = value; }  
  17.     }   
  18.  
  19.     public int Top  
  20.     {  
  21.         get { return top; }  
  22.     }  
  23.  
  24.  
  25.  
  26.     public JStack(int length)  
  27.     {  
  28.         top = -1;  
  29.         size = length;  
  30.         item = new T[length];  
  31.     }   
  32.  
  33.     public int Length()  
  34.     {  
  35.         return top + 1;  
  36.     }         
  37.  
  38.     public bool IsEmpty()  
  39.     {  
  40.         return (top == -1);  
  41.     }   
  42.  
  43.     public void Clear()  
  44.     {  
  45.         top = -1;  
  46.     }   
  47.  
  48.     public void Push(T items)  
  49.     {  
  50.         if (top < size - 1)  
  51.         {  
  52.             item[++top] = items;  
  53.         }  
  54.     }   
  55.  
  56.     public T Pop()  
  57.     {  
  58.         T tmp = default(T);  
  59.         if (!IsEmpty())  
  60.         {  
  61.             tmp = item[top];  
  62.         }  
  63.         return tmp;  
  64.     }   
  65.  
  66.     public T GetPopValue()   
  67.     {  
  68.         if (IsEmpty())  
  69.         {  
  70.             throw new ArgumentNullException("栈已经为空""Item Null");  
  71.         }  
  72.         return item[top];  
  73.     }  
  74.  } 

下面是C#数据结构与算法之栈进行测试:

  1. try 
  2. {  
  3.     JStack<string> js = new JStack<string>(20);  
  4.     Console.WriteLine("------栈刚初始化完成----");  
  5.     Console.WriteLine(js.Length());  
  6.     Console.WriteLine(js.IsEmpty().ToString());  
  7.     js.Push("A");  
  8.     js.Push("B");  
  9.     js.Push("C");  
  10.     js.Push("D");  
  11.     Console.WriteLine("------栈已经插入数据----");  
  12.     Console.WriteLine(js.Length());  
  13.     Console.WriteLine(js.IsEmpty().ToString());  
  14.  
  15.     Console.WriteLine("------取栈顶数据----");  
  16.     Console.WriteLine(js.GetPopValue().ToString());  
  17.  
  18.     Console.WriteLine("------清栈----");  
  19.     js.Clear();  
  20.     Console.WriteLine(js.GetPopValue().ToString());  
  21.     Console.ReadLine();  
  22. }  
  23. catch (Exception ex)  
  24. {  
  25.     Console.WriteLine(ex.Message);  
  26.     Console.ReadLine();  
  27. }  

当你需要把对象的顺序反过来的时候,你就可以按顺序把对象放栈里,然里再从栈里取出来,这时功能就实现了。

C#数据结构与算法之栈的相关内容就向你介绍到这里,希望对你学习C#数据结构与算法中的栈有所帮助。

【编辑推荐】

  1. C#算法之约瑟夫环算法浅析
  2. C#数据结构与算法之线性表浅析
  3. C#数据结构与算法之顺序表浅析
  4. C#数据结构与算法之构造线性表的类浅析
  5. C#数据结构与算法之队列浅析
责任编辑:仲衡 来源: 博客园
相关推荐

2009-08-11 14:43:42

C#数据结构与算法

2009-08-11 14:30:32

C#数据结构与算法

2009-08-11 14:14:42

C#数据结构与算法

2009-08-11 14:36:17

C#数据结构与算法线性表

2009-08-03 17:38:12

排序算法C#数据结构

2023-09-25 12:23:18

Python

2021-03-12 09:13:47

Java数据结构算法

2009-08-12 18:35:17

C#数据结构

2009-08-11 09:19:52

C#选择排序C#算法

2011-04-11 11:23:17

队列数据结构

2011-04-11 12:22:11

数据结构C++

2020-12-31 05:31:01

数据结构算法

2020-10-12 11:48:31

算法与数据结构

2020-12-17 10:12:33

数据结构算法队列

2020-10-21 14:57:04

数据结构算法图形

2020-10-30 09:56:59

Trie树之美

2022-09-26 07:56:53

AVL算法二叉树

2022-09-21 07:57:33

二叉搜索树排序二叉树

2023-03-08 08:03:09

数据结构算法归并排序

2021-07-16 04:57:45

Go算法结构
点赞
收藏

51CTO技术栈公众号