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#数据结构与算法之栈的实现接口:

public interface IStack<T>  
{  
    int Length();  
    bool IsEmpty();  
    void Clear();  
    void Push(T items);  
    T Pop();  
    T GetPopValue();  

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

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

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

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

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

2009-08-12 18:35:17

C#数据结构

2009-08-11 09:19:52

C#选择排序C#算法

2021-03-12 09:13:47

Java数据结构算法

2011-04-11 12:22:11

数据结构C++

2011-04-11 11:23:17

队列数据结构

2020-12-31 05:31:01

数据结构算法

2020-10-30 09:56:59

Trie树之美

2022-09-21 07:57:33

二叉搜索树排序二叉树

2022-09-26 07:56:53

AVL算法二叉树

2020-12-17 10:12:33

数据结构算法队列

2020-10-21 14:57:04

数据结构算法图形

2023-03-08 08:03:09

数据结构算法归并排序

2020-10-12 11:48:31

算法与数据结构

2020-10-20 08:14:08

算法与数据结构
点赞
收藏

51CTO技术栈公众号