Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.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# 从队列列表中删除最后一个元素_C# - Fatal编程技术网

C# 从队列列表中删除最后一个元素

C# 从队列列表中删除最后一个元素,c#,C#,除了第二种情况外,一切正常。在案例2中,我试图从队列中删除最后一个元素,因为默认情况下,它是从一开始就删除的。我试着制作一个反向列表,然后在删除后将其反向恢复到正常状态,但它似乎不起作用。以下是全部代码: namespace _4 { class Program { static void Main(string[] args) { Queue<string> que = new Queue<string>(

除了第二种情况外,一切正常。在案例2中,我试图从队列中删除最后一个元素,因为默认情况下,它是从一开始就删除的。我试着制作一个反向列表,然后在删除后将其反向恢复到正常状态,但它似乎不起作用。以下是全部代码:

namespace _4
    {
    class Program
      {
      static void Main(string[] args)
      {
      Queue<string> que = new Queue<string>();
      int menu;

     do
        {
            Console.WriteLine("1 - Add element");
            Console.WriteLine("2 - Remove last element");
            Console.WriteLine("3 - Find element");
            Console.WriteLine("4 - Info");
            Console.WriteLine("5 - Clear");
            Console.WriteLine("0 - Exit");

            Console.Write("Menu: ");
            menu = Convert.ToInt32(Console.ReadLine());

            switch (menu)
            {
                case 1:
                {
                    Console.Write("How much elements?");

                    int cik = Convert.ToInt32(Console.ReadLine());

                    for (int i = 0; i < cik; i++)
                    {
                        Console.Write("How much elements?: ");
                        string cipars = Console.ReadLine();

                        que.Enqueue(cipars);
                    }

                    Console.WriteLine();
                }
                break;

                case 2: // nestrada
                {
                    Console.Write("How much elements starting from last?");
                    int skaits = Convert.ToInt32(Console.ReadLine());

                    que.Reverse();

                    for (int i = 0; i < skaits; i++)
                    {
                        que.Dequeue();
                    }

                    que.Reverse();


                    Console.WriteLine();
                }
                break;
                case 3:
                {
                    Console.Write("Ievadiet elementu: ");
                    string elements = Console.ReadLine();

                    int numurs = 0;

                    if (que.Contains(elements))
                    {
                        foreach (string item in que)
                        {
                            if (item==elements)
                            {
                                Console.WriteLine("Elementa index ir {0}",numurs);
                            }
                            numurs++;
                        }
                    Console.WriteLine();
                    }

                    else
                    {
                        Console.WriteLine("shada elementa nav.");
                    }
                }
                break;
                case 4:
                {
                    Console.WriteLine("Elementu skaits: {0}",que.Count);
                    Console.WriteLine();
                    foreach (var item in que)
                    {
                        Console.WriteLine(item);
                    }
                }
                break;
                case 5:
                {
                    que.Clear();
                }
                break;
            }
        } while (menu != 0);


    }
}
namespace\u 4
{
班级计划
{
静态void Main(字符串[]参数)
{
Queue que=新队列();
int菜单;
做
{
Console.WriteLine(“1-添加元素”);
Console.WriteLine(“2-删除最后一个元素”);
Console.WriteLine(“3-查找元素”);
Console.WriteLine(“4-信息”);
控制台。写入线(“5-清除”);
控制台写入线(“0-退出”);
控制台。写入(“菜单:”);
menu=Convert.ToInt32(Console.ReadLine());
开关(菜单)
{
案例1:
{
控制台。写(“有多少元素?”);
int cik=Convert.ToInt32(Console.ReadLine());
对于(int i=0;i

}反转是一种功能。您必须将新队列分配给变量并使用新变量

var reveredQueue=que.Reverse()

如果要从两侧删除条目,我不会使用队列。尝试使用数组。

Reverse()
是LINQ方法,而不是
队列
类提供的方法。它使用
队列
作为
IEnumerable
输入序列,并返回一个新的
IEnumerable
,元素顺序颠倒

因此,调用
que.Reverse()
在代码中完全不会做任何事情(甚至不会浪费CPU周期)

不能从队列中删除最后一个元素。您唯一能做的就是创建一个新队列,从中省略最后一个元素

que = new Queue<string>(que.Take(queue.Count - 1));
que=新队列(que.Take(Queue.Count-1));

这是非常低效的,如果没有更好的方法来实现您的目标,您可能需要三思。

您考虑过双端队列吗?实现可以是

但是,您可以执行以下操作来获得第一个元素

object RemoveLast(Queue q) {
object first = q.Peek();
object current = null;
while (true) {
    current = q.Dequeue();
    if (q.Peek() == first) {
        break;
    }
    q.Enqueue(current);
}
return current;
}

function found

我刚才用Queue类上的四种扩展方法回答了这个问题: 同样,也许您不应该首先使用队列,但对于我的用例,我必须保持现有代码不变。

您应该使用堆栈(T)类,即后进先出,检查Push()和Pop()方法。 这可能对你有帮助。

“似乎不起作用”…它到底是怎么不起作用的?它一点也不倒转。它只是从列表中删除第一个元素。p、 这就是为什么我在这个话题上总是被扣掉分数?我做错了什么?你的
Reverse
方法是否改变了列表或返回了一个新的列表,并且删除了Begging元素?如果你想访问队列末尾的项目,你首先不应该使用队列;您应该使用设计为从两端进行操作的数据结构,例如Deque。