Int tos; // индекс вершины стека



 

// Построить пустой класс Stack для реализации стека заданного размера,  

public Stack(int size) {

stck = new char[size]; // распределить память для стека  

tos = 0;

}

 

// Поместить символы в стек,  

public void Push(char ch) {  

if(tos==stck.Length) {

Console.WriteLine(" - Стек заполнен.");  

return;

}

stck[tos] = ch;  

tos++;

}

 

// Извлечь символ из стека,  

public char Pop() {

if(tos==0) {

Console.WriteLine(" - Стек пуст.");  

return (char) 0;

}

tos-- ;

return stck[tos];

}

 

// Возвратить значение true, если стек заполнен,  

public bool IsFull() {  

return tos==stck.Length;

}

 

// Возвратить значение true, если стек пуст,  

public bool IsEmpty() {  

return tos==0;

}

 

// Возвратить общую емкость стека,  

public int Capacity() {

return stck.Length;

}

 

// Возвратить количество объектов, находящихся в данный момент в стеке,  

public int GetNum() {  

return tos;

}

}

 

class StackDemo {

static void Main() {

Stack stk1 = new Stack(10);

Stack stk2 = new Stack(10);

Stack stk3 = new Stack(10);

char ch;  

int i;

 

Поместить ряд символов в стек stk1.

Console.WriteLine("Поместить символы А-J в стек stk1.");  

for(i=0; !stk1.IsFull(); i++)  

stk1.Push((char)('A' + i));

if(stk1.IsFull())  

Console.WriteLine("Стек stk1 заполнен.");

 

Вывести содержимое стека stk1.

Console.Write("Содержимое стека stk1: ");  

while( !stk1.IsEmpty()) {

ch = stk1.Pop();

Console.Write(ch);

}

 

Console.WriteLine();

 

if(stk1.IsEmpty())  

Console.WriteLine("Стек stk1 пуст.");

 

Поместить дополнительные символы в стек stk1.

Console.WriteLine("Вновь поместить символы А-J в стек stk1.");  

for(i=0; !stk1.IsFull(); i++)  

stk1.Push((char)('A' + i));

 

// А теперь извлечь элементы из стека stk1 и поместить их в стек stk2.  

// В итоге элементы сохраняются в стеке stk2 в обратном порядке.  

Console.WriteLine("А теперь извлечь символы из стека stk1\n" +

"и поместить их в стек stk2.");  

while( !stk1.IsEmpty()) {

ch = stk1.Pop();  

stk2.Push(ch);

}

 

Console.Write("Содержимое стека stk2: ");  

while( !stk2.IsEmpty() ) {

ch = stk2.Pop();

Console.Write(ch);

}

 

Console.WriteLine("\n");

 

Поместить 5 символов в стек.

Console.WriteLine("Поместить 5 символов в стек stk3.");  

for(i=0; i < 5; i++)

stk3.Push((char) ('A' + i)) ;

 

Console.WriteLine("Емкость стека stk3: " + stk3.Capacity());  

Console.WriteLine("Количество объектов в стеке stk3: "

+ stk3.GetNum());

}

}

 

При выполнении этой программы получается следующий результат.

 

Поместить символы А-J в стек stk1.

Стек stk1 заполнен.

Содержимое стека stk1: JIHGFEDCBA  

Стек stk1 пуст.

 

Вновь поместить символы А-J в стек stk1.

А теперь извлечь символы из стека stk1  

И поместить их в стек stk2.

Содержимое стека stk2: ABCDEFGHIJ

 

Поместить 5 символов в стек stk3.

Емкость стека stk3: 10  

Количество объектов в стеке stk3: 5

 

 

Передача объектов методам по ссылке

 

В приведенных до сих пор примерах программ при указании параметров, передаваемых методам, использовались типы значений, например int или double. Но в методах можно также использовать параметры ссылочного типа, что не только правильно, но и весьма распространено в ООП. Подобным образом объекты могут передаваться методам по ссылке. В качестве примера рассмотрим следующую программу.

 

// Пример передачи объектов методам по ссылке.

using System;

class MyClass {  

int alpha, beta;

 

public MyClass(int i, int j) {  

alpha = i;  

beta = j;

}

 

// Возвратить значение true, если параметр ob  

// имеет те же значения, что и вызывающий объект,  

public bool SameAs(MyClass ob) {

if ((ob.alpha == alpha) & (ob.beta == beta))  

return true;  

else  

return false;

}

 

// Сделать копию объекта ob.  

public void Copy(MyClass ob) {  

alpha = ob.alpha;  

beta = ob.beta;

}

 

public void Show() {

Console.WriteLine("alpha: {0}, beta: {1}", alpha, beta);

}

}

 

class PassOb {

static void Main() {

MyClass ob1 = new MyClass(4, 5);

MyClass ob2 = new MyClass(6, 7);

 

Console.Write("ob1: ");  

ob1.Show();

 

Console.Write("ob2: ");  

ob2.Show();

 

If(ob1.SameAs(ob2))

Console.WriteLine("ob1 и ob2 имеют одинаковые значения.");  

Else

Console.WriteLine("ob1 и ob2 имеют разные значения.");  

 

Console.WriteLine() ;

 

// А теперь сделать объект ob1 копией объекта ob2.  

ob1.Copy(ob2);

 

Console.Write("ob1 после копирования: ");  

ob1.Show();

If(ob1.SameAs(ob2) )

Console.WriteLine("ob1 и ob2 имеют одинаковые значения.");  

Else

Console.WriteLine("ob1 и ob2 имеют разные значения.");

}

}

 

Выполнение этой программы дает следующий результат.

 

ob1: alpha: 4, beta: 5  

Ob2: alpha: 6, beta: 7


Дата добавления: 2019-02-12; просмотров: 390; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!