任何人都知道如何在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