任何人都知道如何在C#中創建堆棧類,以便在不使用「System.Collections」的情況下執行諸如push,pop,peek和find之類的任務?在沒有System.Collections的情況下創建堆棧類
0
A
回答
4
建立一個鏈表並添加/刪除尾部?
說真的,如果你明白堆棧是如何工作的,你應該能夠很容易地創建一個堆棧。
- Here is a Wikipedia Article Explaining how linked lists work.
- Here is a Wikipedia Article Explaining how stacks work.
我並不想成爲粗魯,但是你的措辭你的問題的方式使得它聽起來像你知道堆棧是什麼,只是不想只需自己寫。
鏈表將比數組更快,只需在鏈表節點上保留一個反引用,並且不僅保存頭部,而且還保存Stack類中的尾部,並且您將節省噸週期尾巴發現和添加/刪除時間。
編輯:
如果是這樣的功課,你可能會得到加分的效率,如果不是;你只需要一個快速的堆棧:對
0
您可以構建一個鏈表:
public class Item
{
public Item next {get; set;}
public Item previous {get; set;}
}
0
你可以通過包裝用推/流行/偷看的實現數組實現堆棧。這是數據結構飼料的標準第一課程。
或者,建立自己的鏈表實現,然後用push/pop/peek實現包裝它。
-2
是的,您可以創建一個沒有任何收集的堆棧程序。
using System;
using System.Linq;
using System.Text;
namespace DataStructures
{
class Stack
{
Object[] stack;
Int32 i;
Int32 j;
public Stack(int n)
{
stack = new Object[n];
i = 0;
j = n;
}
public void Push(object item)
{
if (!isStackFull())
{
stack[i++] = item;
}
else
Console.WriteLine("Stack is Full");
}
public bool isStackFull()
{
if (i == j)
return true;
else
return false;
}
public object Pop()
{
if (stack.Length != 0)
return stack[--i];
return -1;
Console.WriteLine("Stack is empty");
}
public object TopElement()
{
if (stack.Length != 0)
return stack[i - 1];
return 0;
}
}
}
class Program
{
static void Main(string[] args)
{
Stack s = new Stack(5);
s.Push(5);
s.Push(6);
s.Push("string");
s.Push(8);
s.Push("ram");
s.Push(8);
s.Push(8);
Console.WriteLine("Peek: {0}", s.TopElement());
Console.WriteLine("Pop: {0}", s.Pop());
Console.WriteLine("Peek: {0}", s.TopElement());
Console.WriteLine("pop: {0}", s.Pop());
Console.Read();
}
}
您可以根據需要修改上述程序。
+1
這是一個很差的實現。它應該是通用的,而不是對所有東西都使用'object',所以通常期望這樣的結構在滿時動態擴展自己,而不是什麼都不做,當出現問題時應拋出異常,而不是寫入控制檯如果此類的用戶不希望用戶看到該消息,或者如果他們不使用基於控制檯的應用程序會怎麼樣?),你的peek方法可以拋出索引超出界限錯誤,並且如果堆棧有一個空數組,它不應該返回'0',它應該拋出一個異常。 – Servy 2014-03-04 17:14:54
0
class Node
{
Node next;
Object data;
}
class Stack {
Node Top;
public Node Pop()
{
if(Top==null)
return null;
Node n = Top;
Top = Top.Next;
return n;
}
public void Push(Object i)
{
Node n = new Node(i);
n.Next = Top;
Top = n;
}
}
相關問題
- 1. 在沒有堆棧的情況下創建NPE
- 2. 如何在沒有獲得NPE的情況下在堆棧上彈出節點
- 3. 在沒有堆棧的情況下在Linux上進行系統調用
- 4. 如何在沒有堆棧指針的情況下找到堆棧的當前位置?
- 5. 如何在沒有catch/try/raise的情況下展開(多級返回)堆棧?
- 6. 如何在沒有pstack和gdb的情況下獲得線程堆棧信息
- 7. STM32f429ZI在沒有調試器的情況下記錄調用堆棧
- 8. 如何在沒有%rbp寄存器的情況下重新分配堆棧幀?
- 9. 在沒有BouncyCastle的情況下在Java中創建X509證書?
- 10. 在沒有XmlDocument的情況下在C#中創建XmlNode/XmlElement?
- 11. 在沒有Doctrine的情況下在Symfony2中創建實體
- 12. 在沒有Visual Studio的情況下創建Windows服務
- 13. Ember數據:在沒有商店的情況下創建模型
- 14. 在沒有openssl的情況下創建證書
- 15. 在沒有命令行的情況下創建果園模塊
- 16. 我可以在沒有Visual Studio的情況下創建ClickOnce嗎?
- 17. 如何在沒有ListActivity的情況下創建ListView
- 18. 在沒有擴展的情況下創建線程並執行
- 19. 如何在沒有Eclipse的情況下創建IProject
- 20. .appendChild(tr)在沒有數據的情況下創建tr
- 21. 如何在沒有phpexcel的情況下從php創建excel?
- 22. 在沒有malloc的情況下創建內存緩衝區
- 23. 在沒有Xcode的情況下創建iPhone應用程序
- 24. 在沒有Eclipse的情況下創建Android簽名APK。 。
- 25. 在沒有mac的情況下創建iPhone webapp
- 26. 在沒有Java的情況下創建Android應用程序
- 27. 在沒有註冊的情況下創建自定義文化
- 28. Libgdx在沒有TiledMap的情況下創建快速地圖
- 29. Ruby - 如何在沒有.new的情況下創建MatchData對象?
- 30. Junit在沒有ant/maven的情況下創建報告
爲什麼不愛System.Collections? – 2010-11-17 01:20:53
這是功課嗎? – 2010-11-17 01:21:57
@Jay Riggs:有些東西告訴我這是一個家庭作業問題,他被禁止使用'System.Collections',因爲這會**失敗點。** – Aren 2010-11-17 01:26:18