public partial class Form1 : Form
{
private List stack = new List();
private const int itemSize = 25;
private const int spacing = 10;
private Point stackLocation = new Point(30, 30);
private const int maxItems = 10;
private void UpdateStack()
{
panel1.Controls.Clear();
for (int i = 0; i < stack.Count; i++)
{
Panel cell = new Panel();
cell.Size = new Size(itemSize, itemSize);
cell.Location = new Point(stackLocation.X, stackLocation.Y + i * (itemSize + spacing));
cell.BorderStyle = BorderStyle.FixedSingle;
Label label = new Label();
label.Text = stack[i].ToString();
label.Size = new Size(itemSize, itemSize);
label.BorderStyle = BorderStyle.FixedSingle;
label.TextAlign = ContentAlignment.MiddleCenter;
label.Location = new Point(0, 0);
cell.Controls.Add(label);
panel1.Controls.Add(cell);
}
}
private void panel1_Paint(object sender, PaintEventArgs e)
{
int index = 0;
int maxItemsToDisplay = 10;
if (stack.Count > maxItemsToDisplay)
{
index = stack.Count - maxItemsToDisplay;
}
for (int i = index; i < stack.Count; i++)
{
Label label = new Label();
label.Text = stack[i].ToString();
label.Size = new Size(itemSize, itemSize);
label.BorderStyle = BorderStyle.FixedSingle;
label.TextAlign = ContentAlignment.MiddleCenter;
label.Location = new Point(stackLocation.X, stackLocation.Y + (i - index) * (itemSize + spacing));
panel1.Controls.Add(label);
}
}
private void button1_Click(object sender, EventArgs e)
{
stack.Clear();
UpdateStack();
}
private void button2_Click(object sender, EventArgs e)
{
if (stack.Count < maxItems)
{
int num = 0;
if (!int.TryParse(textBox1.Text, out num))
{
MessageBox.Show("Invalid input. Please enter an integer.");
return;
}
stack.Add(num);
UpdateStack();
}
else
{
MessageBox.Show("Stack is full.");
}
}
private void button3_Click(object sender, EventArgs e)
{
if (stack.Count == 0)
{
MessageBox.Show("Stack is empty.");
}
else
{
stack.RemoveAt(stack.Count - 1);
UpdateStack();
}
}
}
визуализация стека на односвязном списке, тьфу, и готово
public partial class Form1 : Form
{
private List<int> stack = new List<int>(); // Односвязный список для хранения стека
private const int itemSize = 25; // Размер элемента стека
private const int spacing = 10; // Расстояние между элементами
private Point stackLocation = new Point(30, 30); // Координаты верхнего элемента стека
private const int maxItems = 10; // Максимальное количество элементов в стеке