Реализация stack в C#
У меня есть задание, нужно реализовать структуру данных, которая будет реализововать операции добавления элементов в стек, удаления из стека и подсчитывать сумму d
чисел находящихся на вершине стека. Выводить мне нужно просто элементы, которые были удалены из стека и подсчитанную сумму стека.
using System;
using System.Collections.Generic;
public class Program
{
public static void Main()
{
int n = int.Parse(Console.ReadLine());
Stack<int> stack = [];
List<int> result = [];
for (int i = 0; i < n; i++)
{
string input = Console.ReadLine();
if (!string.IsNullOrEmpty(input))
{
string command = input[0].ToString();
string valueStr = input.Length > 1 ? input.Substring(1) : "";
switch (command)
{
case "+":
stack.Push(int.Parse(valueStr));
break;
case "-":
if (stack.Count > 0)
result.Add(stack.Pop());
else
result.Add(0);
break;
case "?":
int sum = 0;
if (string.IsNullOrEmpty(valueStr))
{
foreach (var value in stack)
{
sum += value;
}
}
else
{
int k = int.Parse(valueStr);
int count = 0;
foreach (var value in stack)
{
if (count >= k) break;
sum += value;
count++;
}
}
result.Add(sum);
break;
}
}
}
foreach (var item in result)
{
Console.WriteLine(item);
}
}
}
Изначально я реализовал собственный стек с методами Push
, Pop
и тд. Затем использовал уже встроенный стек.
Вопрос у меня таков: что может быть не так с данной реализацией? Какие ошибки она может принести?
Ответы (1 шт):
Вам нужно реализовать структуру данных, которая работает как стек, но с дополнительной операцией для подсчета суммы заданного количества элементов на его вершине. Можно воспользоваться готовым стеком а можно создать класс CustomStack, который поддерживает операции добавления (Push), удаления (Pop), и подсчёта суммы d элементов на вершине стека (SumTop).
using System;
using System.Collections.Generic;
public class CustomStack
{
private Stack<int> stack = new Stack<int>();
// Метод для добавления элемента в стек
public void Push(int value)
{
stack.Push(value);
Console.WriteLine($"Элемент {value} добавлен в стек.");
}
// Метод для удаления элемента из стека
public int Pop()
{
if (stack.Count == 0)
{
Console.WriteLine("Стек пуст.");
return -1; // Например, возвращаем -1, если стек пуст
}
int removedElement = stack.Pop();
Console.WriteLine($"Элемент {removedElement} удален из стека.");
return removedElement;
}
// Метод для подсчета суммы d элементов на вершине стека
public int SumTop(int d)
{
if (d > stack.Count)
{
Console.WriteLine("В стеке недостаточно элементов для подсчета суммы.");
return 0;
}
int sum = 0;
int count = 0;
foreach (var item in stack)
{
sum += item;
count++;
if (count == d) break;
}
Console.WriteLine($"Сумма {d} верхних элементов стека: {sum}");
return sum;
}
}
class Program
{
static void Main()
{
CustomStack customStack = new CustomStack();
customStack.Push(10);
customStack.Push(20);
customStack.Push(30);
customStack.SumTop(2); // Суммируем два верхних элемента стека
customStack.Pop();
customStack.SumTop(2); // Суммируем два верхних элемента стека после удаления
}
}