Как объеденить два объекта? Доброго времени суток!
Программа представляет собою стек, куда записываются вагоны и они сортируются по типам А и Б.
Нужно мне эти два типа объеденить и потом вывести одним целым стеком.
Как объединить их информацию в одну целую?using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
interface IStack {
Boolean Empty();
object Pop();
object Push(object element1);
object Peek();
void Display();
}
class Carriage {
public int CarriageNumber {
get; protected set;
}
public string CarriageType {
get; protected set;
}
public Carriage(string type, int number) {
this.CarriageNumber = number;
this.CarriageType = type;
}
public override string ToString() {
return CarriageNumber.ToString() + "/" + CarriageType;
}
public void Entering() {
}
}
class Stack : IStack {
int StackSize;
int top;
object[] item;
public int StackSizeProperty {
get { return StackSize; }
set { StackSize = value; }
}
public Stack() {
StackSizeProperty = 10;
item = new object[StackSize];
top = 0;
}
public Stack(int capacity) {
StackSizeProperty = capacity;
item = new object[StackSizeProperty];
top = 0;
}
public bool Empty() {
if (top == 0) {
return true;
}
return false;
}

public object Push(object elements) {
if (top == StackSize) {
Console.WriteLine("Stack is full.\n");
return "Stack is full.";
}
else {
item[++top] = elements;
Console.WriteLine("Item was been pushed.\n");
return "item was been pushed.";
}
}
public void Entering(string CarriageType, int CarriageNumber) {
Console.Write("\n\tEnter the type of train: ");
CarriageType = Console.ReadLine();
Console.Write("\tEnter the number of train: ");
CarriageNumber = int.Parse(Console.ReadLine());
}
public object Pop() {
if (Empty())
{
Console.WriteLine("Stack is empty.\n");
return "Nothing.";
}
else {
return item[top--];
}
}
public object Peek() {
if (Empty()) {
Console.WriteLine("Stack is empty.\n");
return "Nothing.";
}
else {
return item[top];
}
}
public void Display() {
for (int elements = top; elements > 0; elements--) {
Console.WriteLine("Item " + elements + ": " + item[elements]);
}
}
public void Exit() {
do{
} while (Console.ReadKey().Key != ConsoleKey.Escape);
}
public int Entering() {
Console.Write("\tEnter the number of train: ");
return int.Parse(Console.ReadLine());
}
}
class MainProgramStacks {
static void Main() {
Stack FullStack = new Stack();
Stack AtypeStack = new Stack();
Stack BtypeStack = new Stack();
int mm_choice = 0, type_choice = 0, peek_choice = 0,
rmv_choice = 0, display_choice = 0,
CarriageNumberA = 0, CarriageNumberB = 0;
while (true) {
Console.WriteLine("- -- --- - Menu - --- -- -");
Console.WriteLine("- 1 - Add an element -"); //+
Console.WriteLine("- 2 - Peek top element -"); //-
Console.WriteLine("- 3 - Remove top element -"); //+
Console.WriteLine("- 4 - Display stacks -"); //+
Console.WriteLine("- 5 - Exit -");
Console.WriteLine("- -- --- - -- - --- -- -");
mm_choice = int.Parse(Console.ReadLine());

switch (mm_choice) {
case 1:
Console.Clear();
while (type_choice != 3)
{
Console.WriteLine("- 1 - Add an element to type A: ");
Console.WriteLine("- 2 - Add an element to type B: ");
Console.WriteLine("- 3 - Exit -");
type_choice = int.Parse(Console.ReadLine());
switch (type_choice)
{
case 1:
AtypeStack.Push(new Carriage("a", AtypeStack.Entering()));
break;
case 2:
BtypeStack.Push(new Carriage("b", AtypeStack.Entering()));
break;
}
}
break;
case 2:
Console.Clear();
while (peek_choice != 3) {
Console.WriteLine("- 1 - Peek top element of A type: ");
Console.WriteLine("- 2 - Peek top element of B type: ");
Console.WriteLine("- 3 - Exit ");
peek_choice = int.Parse(Console.ReadLine());
switch (peek_choice) {
case 1:
AtypeStack.Peek();
break;
case 2:
BtypeStack.Peek();
break;
}
}
break;
case 3:
Console.Clear();
while (rmv_choice != 3) {
Console.WriteLine("- 1 - Remove element from type A: ");
Console.WriteLine("- 2 - Remove element from type B: ");
Console.WriteLine("- 3 - Exit -");
rmv_choice = int.Parse(Console.ReadLine());
switch (rmv_choice) {
case 1:
AtypeStack.Pop();
break;
case 2:
BtypeStack.Pop();
break;
}
}
FullStack.Pop();
break;
case 4:
Console.Clear();
while (display_choice != 4)
{
Console.WriteLine("- 1 - Display elements of type A: ");
Console.WriteLine("- 2 - Display elements of type B: ");
Console.WriteLine("- 3 - Display all elements: ");
Console.WriteLine("- 4 - Exit -");
display_choice = int.Parse(Console.ReadLine());

switch (display_choice)
{
case 1:
AtypeStack.Display();
break;
case 2:
BtypeStack.Display();
break;
case 3:
FullStack.Display();
break;
}
}
break;
case 5:
FullStack.Exit();
break;
}
}
}
}

21 Авг 2019 в 07:00
211 +1
0
Ответы
1

Для объединения двух стеков типов A и B в один общий стек, можно просто добавить все элементы из стека типа B в стек типа A.
Вот пример кода, который показывает, как это сделать:

Создаём метод в классе Stack для объединения стеков:public void CombineStacks(Stack stackB)
{
while(!stackB.Empty())
{
Push(stackB.Pop());
}
}В методе Main после добавления элементов в стеки типов A и B, вызываем метод CombineStacks для объединения:case 1:
Console.Clear();
while (type_choice != 3)
{
Console.WriteLine("- 1 - Add an element to type A: ");
Console.WriteLine("- 2 - Add an element to type B: ");
Console.WriteLine("- 3 - Exit -");
type_choice = int.Parse(Console.ReadLine());
switch (type_choice)
{
case 1:
AtypeStack.Push(new Carriage("a", AtypeStack.Entering()));
break;
case 2:
BtypeStack.Push(new Carriage("b", AtypeStack.Entering()));
break;
}
}
AtypeStack.CombineStacks(BtypeStack);
break;

Теперь после того, как вы добавите все элементы в стеки типов A и B, они будут объединены в стеке типа A.

20 Апр 2024 в 13:09
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир