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