Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 创建没有System.Collections的堆栈类_C#_Stack - Fatal编程技术网

C# 创建没有System.Collections的堆栈类

C# 创建没有System.Collections的堆栈类,c#,stack,C#,Stack,有人知道如何在C#中创建stack类,以便在不使用“System.Collections”的情况下执行推送、弹出、查看和查找等任务吗?制作链接列表并添加/删除尾部 说真的,如果您了解堆栈的工作原理,您应该能够相当容易地创建一个堆栈 我并不是说你很粗鲁,但你的问题措辞让人觉得你知道堆栈是什么,只是不想自己写 链表将比数组快,只需在链表节点上保留一个back引用,并且自己在堆栈类中不仅保留head,还保留tail,就可以在tail发现和添加/删除时间上节省大量的周期 编辑: 如果这是家庭作业

有人知道如何在C#中创建stack类,以便在不使用“System.Collections”的情况下执行推送、弹出、查看和查找等任务吗?

制作链接列表并添加/删除尾部

说真的,如果您了解堆栈的工作原理,您应该能够相当容易地创建一个堆栈

我并不是说你很粗鲁,但你的问题措辞让人觉得你知道堆栈是什么,只是不想自己写

链表将比数组快,只需在链表节点上保留一个back引用,并且自己在堆栈类中不仅保留head,还保留tail,就可以在tail发现和添加/删除时间上节省大量的周期

编辑:


如果这是家庭作业,如果不是,你可以获得效率奖励分数;你会有一个快速的堆栈:p

制作一个链表并添加/删除尾部

说真的,如果您了解堆栈的工作原理,您应该能够相当容易地创建一个堆栈

我并不是说你很粗鲁,但你的问题措辞让人觉得你知道堆栈是什么,只是不想自己写

链表将比数组快,只需在链表节点上保留一个back引用,并且自己在堆栈类中不仅保留head,还保留tail,就可以在tail发现和添加/删除时间上节省大量的周期

编辑:


如果这是家庭作业,如果不是,你可以获得效率奖励分数;您将拥有一个快速堆栈:p

您可以构建一个链接列表:

public class Item
{
   public Item next {get; set;}
   public Item previous {get; set;}
}

您可以构建一个链接列表:

public class Item
{
   public Item next {get; set;}
   public Item previous {get; set;}
}

可以通过使用push/pop/peek实现包装数组来实现堆栈。这是数据结构饲料的标准第一门课程


或者,构建自己的链表实现,然后用push/pop/peek实现将其包装起来

您可以通过使用push/pop/peek实现包装数组来实现堆栈。这是数据结构饲料的标准第一门课程


或者,构建自己的链表实现,然后用push/pop/peek实现将其包装起来

是的,您可以创建一个没有任何集合的堆栈程序

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

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

是的,您可以创建一个没有任何集合的堆栈程序

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

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

为什么不喜欢系统。收藏?@Jay Riggs:有人告诉我这是一个家庭作业问题,他被禁止使用
System.Collections
,因为那样会违背这一点。我只是在尝试学习其他方法。采访问题:),在下面添加了答案…为什么不喜欢系统。收藏?@Jay Riggs:有人告诉我这是一个家庭作业问题,他被禁止使用
系统。收藏
,因为这会破坏重点。我只是在尝试学习其他方法。采访问题:),在下面添加了答案…嗯?对于数组,只需在堆栈顶部保留一个索引。浪费的周期在哪里?随着大小的增加,如果堆栈超过了数组的大小,您必须重新分配一个更大的,并将值从旧复制到新。数组的问题:扩展,链表的问题:发现时间。我提供了一个解决方案,消除了这两种方法的缺点。嗯?对于数组,只需在堆栈顶部保留一个索引。浪费的周期在哪里?随着大小的增加,如果堆栈超过了数组的大小,您必须重新分配一个更大的,并将值从旧复制到新。数组的问题:扩展,链表的问题:发现时间。我提供了一个解决方案,消除了这两种方法的缺点。这是一个非常糟糕的实现。它应该是泛型的,而不是使用
对象
来处理所有事情,通常期望这样的结构在满时动态扩展自己,而不是什么都不做,当出现问题时,应该抛出异常,而不是写入控制台(如果此类的用户不希望用户看到该消息,或者如果他们不使用基于控制台的应用程序,该怎么办?),您的peek方法可能会抛出索引越界错误,并且它不应该返回
0
如果堆栈有空数组,它应该抛出异常。这是一个非常糟糕的实现。它应该是通用的,而不是对所有内容都使用
object
,通常期望这样的结构能够动态扩展自身如果出现问题,您应该抛出异常,而不是什么都不做(如果此类的用户不希望用户看到该消息,或者如果他们不使用基于控制台的应用程序,该怎么办?),peek方法会抛出索引越界错误,并且不应返回
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;
  }
}