Читаем Полное руководство. С# 4.0 полностью

Конкретное применение класса Stack для реализации стека демонстрируется в приведенной ниже программе. // Продемонстрировать применение класса Stack. using System; // Класс для хранения символов в стеке. class Stack { // Эти члены класса являются закрытыми. char[] stck; // массив, содержащий стек 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 пуст.\n"); // Поместить дополнительные символы в стек stk1. Console.WriteLine("Вновь поместить символы A-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); } }

Перейти на страницу:

Похожие книги

Основы программирования в Linux
Основы программирования в Linux

В четвертом издании популярного руководства даны основы программирования в операционной системе Linux. Рассмотрены: использование библиотек C/C++ и стан­дартных средств разработки, организация системных вызовов, файловый ввод/вывод, взаимодействие процессов, программирование средствами командной оболочки, создание графических пользовательских интерфейсов с помощью инструментальных средств GTK+ или Qt, применение сокетов и др. Описана компиляция программ, их компоновка c библиотеками и работа с терминальным вводом/выводом. Даны приемы написания приложений в средах GNOME® и KDE®, хранения данных с использованием СУБД MySQL® и отладки программ. Книга хорошо структурирована, что делает обучение легким и быстрым. Для начинающих Linux-программистов

Нейл Мэтью , Ричард Стоунс , Татьяна Коротяева

ОС и Сети / Программирование / Книги по IT
97 этюдов для архитекторов программных систем
97 этюдов для архитекторов программных систем

Успешная карьера архитектора программного обеспечения требует хорошего владения как технической, так и деловой сторонами вопросов, связанных с проектированием архитектуры. В этой необычной книге ведущие архитекторы ПО со всего света обсуждают важные принципы разработки, выходящие далеко за пределы чисто технических вопросов.?Архитектор ПО выполняет роль посредника между командой разработчиков и бизнес-руководством компании, поэтому чтобы добиться успеха в этой профессии, необходимо не только овладеть различными технологиями, но и обеспечить работу над проектом в соответствии с бизнес-целями. В книге более 50 архитекторов рассказывают о том, что считают самым важным в своей работе, дают советы, как организовать общение с другими участниками проекта, как снизить сложность архитектуры, как оказывать поддержку разработчикам. Они щедро делятся множеством полезных идей и приемов, которые вынесли из своего многолетнего опыта. Авторы надеются, что книга станет источником вдохновения и руководством к действию для многих профессиональных программистов.

Билл де Ора , Майкл Хайгард , Нил Форд

Программирование, программы, базы данных / Базы данных / Программирование / Книги по IT
Программист-прагматик. Путь от подмастерья к мастеру
Программист-прагматик. Путь от подмастерья к мастеру

Находясь на переднем крае программирования, книга "Программист-прагматик. Путь от подмастерья к мастеру" абстрагируется от всевозрастающей специализации и технических тонкостей разработки программ на современном уровне, чтобы исследовать суть процесса – требования к работоспособной и поддерживаемой программе, приводящей пользователей в восторг. Книга охватывает различные темы – от личной ответственности и карьерного роста до архитектурных методик, придающих программам гибкость и простоту в адаптации и повторном использовании.Прочитав эту книгу, вы научитесь:Бороться с недостатками программного обеспечения;Избегать ловушек, связанных с дублированием знания;Создавать гибкие, динамичные и адаптируемые программы;Избегать программирования в расчете на совпадение;Защищать вашу программу при помощи контрактов, утверждений и исключений;Собирать реальные требования;Осуществлять безжалостное и эффективное тестирование;Приводить в восторг ваших пользователей;Формировать команды из программистов-прагматиков и с помощью автоматизации делать ваши разработки более точными.

А. Алексашин , Дэвид Томас , Эндрю Хант

Программирование / Книги по IT