程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 了解集合本質必須要知曉的概念02-堆棧,02-堆棧

了解集合本質必須要知曉的概念02-堆棧,02-堆棧

編輯:C#入門知識

了解集合本質必須要知曉的概念02-堆棧,02-堆棧


在"了解集合本質必須要知曉的概念-鏈表"中,我們了解了鏈表的概念和種類,並且模擬了一個單向鏈表。本篇體驗的堆棧是約束版的鏈表,只能在棧頂接收新節點和釋放節點。

 

堆棧的主要操作是壓棧和出棧。壓棧是將新節點放在棧頂,出棧是從棧頂取出一個節點,返回新彈出節點的數據項。堆棧也稱為後進先出的數據結構。

 

接著上一篇,寫一個派生於List的類來模擬堆棧的壓棧和出棧。

namespace LinkedListLibrary
{
    public class StackInheritance : List
    {
        public StackInheritance() : base("stack"){}
        public void Push(object dataValue)
        {
            InsertAtFront(dataValue);
        }
        public object Pop()
        {
            return RemoveFromFront();
        }
    }
}

 

客戶端調用。

        public static void Main(string[] args)
        {
            StackInheritance stack = new StackInheritance();
            bool aBoolean = true;
            char aChar = 'a';
            int anInt = 12;
            string aStr = "hello";
            stack.Push(aBoolean);
            stack.Display();
            stack.Push(aChar);
            stack.Display();
            stack.Push(anInt);
            stack.Display();
            stack.Push(aStr);
            stack.Display();
            try
            {
                while (true)
                {
                    object removedObject = stack.Pop();
                    Console.WriteLine(removedObject + "被彈出~~");
                    stack.Display();
                }
            }
            catch (EmptyListException emptyListException)
            {                
                Console.Error.WriteLine(emptyListException.StackTrace);
            }
            Console.ReadKey();
        }

 

 

參考資料:

Visual C# 2008大學教程--(第三版)

 

“了解集合本質必須要知曉的概念”系列包括:

了解集合本質必須要知曉的概念01-鏈表

了解集合本質必須要知曉的概念02-堆棧

了解集合本質必須要知曉的概念03-隊列


C的堆棧概念

1 這裡就是指棧(stack),堆(heap)和棧是兩個概念
2 你理解的沒錯,局部變量是在棧上分配的,具有局部作用域,程序自動管理,堆上的數據具有全局作用域,需要手工回收。
 

怎根據需要定義堆棧段的大小?

堆棧的定義是這樣的:
dssg segment stack
aa dw 512dup(?)
dssg ends
一般的說,當PUSH/POP指令不頻繁時用系統堆棧就可以了,但是當需要堆棧存儲大量數據,如作為子程序傳替參數時就要定義一個堆棧,而且一般來說一個段的內容不能超過64K,因為偏移地址最大只能表示64K,所以定義的堆棧也不能是無限大,如果超過了64K,就定義兩個吧!
堆棧在匯編中對於初學者用的很少,一般小程序都不需要用的!用起來也不是很難,就是注意下,在子程序調用時,什麼時候是返回地址,什麼時候是寄存器值!總之,記住先進後出,再做題時畫個堆棧圖,應該不會很難的!
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved