自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

C#數(shù)據(jù)結(jié)構(gòu)與算法之棧淺析

開發(fā) 后端 算法
C#數(shù)據(jù)結(jié)構(gòu)與算法之棧淺析主要向你介紹C#數(shù)據(jù)結(jié)構(gòu)與算法之棧的概念和實現(xiàn),棧的使用是程序的一種思路,希望本文對你有所啟發(fā)。

C#數(shù)據(jù)結(jié)構(gòu)與算法之棧(stack)在計算機科學(xué)中是限定僅在表尾進行插入或刪除操作的線形表。它按照后進先出的原則存儲數(shù)據(jù),先進入的數(shù)據(jù)被壓入棧底,最后的數(shù)據(jù)在棧頂,需要讀數(shù)據(jù)的時候從棧頂開始彈出數(shù)據(jù)(最后一個數(shù)據(jù)被第一個讀出來,它只能在某一端插入和刪除的特殊線性表。用桶堆積物品,先堆進來的壓在底下,隨后一件一件往堆。取走時,只能從上面一件一件取。堆和取都在頂部進行,底部一般是不動的。

C#數(shù)據(jù)結(jié)構(gòu)與算法之棧就是一種類似桶堆積物品的數(shù)據(jù)結(jié)構(gòu),進行刪除和插入的一端稱棧頂,另一堆稱棧底。插入一般稱為進棧(PUSH),刪除則稱為退棧(POP)。 棧也稱為后進先出表(LIFO表)。

C#數(shù)據(jù)結(jié)構(gòu)與算法之棧1、進棧(PUSH)算法

◆若TOP≥n時,則給出溢出信息,作出錯處理(進棧前首先檢查棧是否已滿,滿則溢出;不滿則作②);

◆置TOP=TOP+1(棧指針加1,指向進棧地址);

◆S(TOP)=X,結(jié)束(X為新進棧的元素);

C#數(shù)據(jù)結(jié)構(gòu)與算法之棧2、退棧(POP)算法

◆若TOP≤0,則給出下溢信息,作出錯處理(退棧前先檢查是否已為空棧, 空則下溢;不空則作②);

◆X=S(SOP),(退棧后的元素賦給X);

◆TOP=TOP-1,結(jié)束(棧指針減1,指向棧頂)。

C#數(shù)據(jù)結(jié)構(gòu)與算法之棧的實現(xiàn)接口:

  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#數(shù)據(jù)結(jié)構(gòu)與算法之棧的實現(xiàn)的類:

  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("棧已經(jīng)為空""Item Null");  
  71.         }  
  72.         return item[top];  
  73.     }  
  74.  } 

下面是C#數(shù)據(jù)結(jié)構(gòu)與算法之棧進行測試:

  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("------棧已經(jīng)插入數(shù)據(jù)----");  
  12.     Console.WriteLine(js.Length());  
  13.     Console.WriteLine(js.IsEmpty().ToString());  
  14.  
  15.     Console.WriteLine("------取棧頂數(shù)據(jù)----");  
  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. }  

當你需要把對象的順序反過來的時候,你就可以按順序把對象放棧里,然里再從棧里取出來,這時功能就實現(xiàn)了。

C#數(shù)據(jù)結(jié)構(gòu)與算法之棧的相關(guān)內(nèi)容就向你介紹到這里,希望對你學(xué)習(xí)C#數(shù)據(jù)結(jié)構(gòu)與算法中的棧有所幫助。

【編輯推薦】

  1. C#算法之約瑟夫環(huán)算法淺析
  2. C#數(shù)據(jù)結(jié)構(gòu)與算法之線性表淺析
  3. C#數(shù)據(jù)結(jié)構(gòu)與算法之順序表淺析
  4. C#數(shù)據(jù)結(jié)構(gòu)與算法之構(gòu)造線性表的類淺析
  5. C#數(shù)據(jù)結(jié)構(gòu)與算法之隊列淺析
責(zé)任編輯:仲衡 來源: 博客園
相關(guān)推薦

2009-08-11 14:43:42

C#數(shù)據(jù)結(jié)構(gòu)與算法

2009-08-11 14:30:32

C#數(shù)據(jù)結(jié)構(gòu)與算法

2009-08-11 14:14:42

C#數(shù)據(jù)結(jié)構(gòu)與算法

2009-08-11 14:36:17

C#數(shù)據(jù)結(jié)構(gòu)與算法線性表

2009-08-03 17:38:12

排序算法C#數(shù)據(jù)結(jié)構(gòu)

2023-09-25 12:23:18

Python

2009-08-12 18:35:17

C#數(shù)據(jù)結(jié)構(gòu)

2009-08-11 09:19:52

C#選擇排序C#算法

2021-03-12 09:13:47

Java數(shù)據(jù)結(jié)構(gòu)算法

2020-10-30 09:56:59

Trie樹之美

2022-09-21 07:57:33

二叉搜索樹排序二叉樹

2022-09-26 07:56:53

AVL算法二叉樹

2011-04-11 12:22:11

數(shù)據(jù)結(jié)構(gòu)C++

2011-04-11 11:23:17

隊列數(shù)據(jù)結(jié)構(gòu)

2020-12-17 10:12:33

數(shù)據(jù)結(jié)構(gòu)算法隊列

2020-12-31 05:31:01

數(shù)據(jù)結(jié)構(gòu)算法

2020-10-21 14:57:04

數(shù)據(jù)結(jié)構(gòu)算法圖形

2023-03-08 08:03:09

數(shù)據(jù)結(jié)構(gòu)算法歸并排序

2020-10-20 08:14:08

算法與數(shù)據(jù)結(jié)構(gòu)

2020-10-12 11:48:31

算法與數(shù)據(jù)結(jié)構(gòu)
點贊
收藏

51CTO技術(shù)棧公眾號