任何人都知道如何在C#中创建堆栈类,以便在不使用“System.Collections”的情况下执行push,pop,peek和find等任务?
答案 0 :(得分:4)
创建一个链表并添加/删除尾部?
说真的,如果您了解堆栈的工作方式,那么应该能够轻松地制作堆栈。
我的意思并不是吝啬,但你提出问题的方式让人觉得你知道堆栈是什么,只是不想简单地自己编写。
链接列表会比数组更快,只需在链接列表节点上保留一个反向引用,不仅可以保存头部,而且可以自己保存Stack类中的尾部,并且可以节省大量的周期尾部发现和添加/删除时间。
修改强>
如果这是作业,你可能会获得效率的奖励标记,如果不是;你只需要一个快速的堆栈:p
答案 1 :(得分:0)
您可以构建链接列表:
public class Item
{
public Item next {get; set;}
public Item previous {get; set;}
}
答案 2 :(得分:0)
您可以通过使用push / pop / peek的实现包装数组来实现堆栈。这是数据结构饲料的标准第一道菜。
或者,构建自己的链表实现,然后用push / pop / peek的实现包装它。
答案 3 :(得分: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;
}
}
答案 4 :(得分:-2)
是的,你可以创建一个没有任何集合的Stack程序。
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();
}
}
您可以根据需要修改上述程序。