创建没有System.Collections的堆栈类

时间:2010-11-17 01:19:56

标签: c# stack

任何人都知道如何在C#中创建堆栈类,以便在不使用“System.Collections”的情况下执行push,pop,peek和find等任务?

5 个答案:

答案 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();
        }
    }

您可以根据需要修改上述程序。