Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Data Structures and Algorithms in C++ 2e (На ру...docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.37 Mб
Скачать

XII Предисловие

Предпосылки

Мы написали эту книгу, предполагающую, что читатель приезжает в нее с определенным knowl-

край. Мы предполагаем, что читатель, по крайней мере, неопределенно знаком с высокого уровня про - gramming язык, такой как C, C ++, Пайтон, или Ява, и что он или она понимает главные конструкции с такого языка высокого уровня, включая:

• Переменные и выражения.

• Функции (также известный как методы или процедуры).• Структуры решения (такие как-будто-заявления и заявления выключателя).• Итеративные структуры (для петель и в-то-время-как-петли).

Для читателей, которые знакомы с этими понятиями, но не с тем, как они экс-

нажатый в C ++, мы предоставляем учебник для начинающих на C ++ язык в Главе 1. Однако, эта книга - прежде всего книга структур данных, не C ++ книга; следовательно, это не обеспечивает всестороннюю обработку C ++. Тем не менее, мы не предполагаем, что читатель обязательно знаком с ориентированным на объект дизайном или со связанными структурами, таков как связанные списки, так как эти темы затронуты в основных главах этой книги.

С точки зрения математического фона мы предполагаем, что читатель несколько famil-iar с темами от математики средней школы. Несмотря на это, в Главе 4, мы обсуждаем семь большинство - важные функции для анализа алгоритма. Фактически, секции, которые используют что-то другое, чем одна из этих семи функций, считают дополнительными, и обозначают со звездой (). Мы даем резюме других полезных математических фактов, включая элементарную вероятность, в Приложении A.

Об авторах

Профессора Гудрич, Tamassia и гора являются хорошо признанными исследователями в al -

gorithms и структуры данных, опубликовав много работ в этой области, с AP - plications к интернет-вычислению, информационной визуализации, компьютерной безопасности и геометрическому вычислению. Они служили научными руководителями в нескольких совместных проектах, спонсируемых Национальным научным фондом, армейским Исследованием - fice, Офис Военно-морского Исследования и Управление перспективного планирования оборонных научно-исследовательских работ. Они также активны в образовательных технологических исследованиях.

В 1987 Майкл Гудрич получил степень доктора философии в Информатике в Пердью Uni-versity. Он в настоящее время - профессор канцлера в Отделе Науки Com-короткой клюшки для гольфа в Калифорнийском университете, Ирвине. Ранее, он был преподавателем в Университете Джонса Хопкинса. Он - редактор для многих журналов в теории информатики, вычислительной геометрии и алгоритмах графа. Он - Скидка ACM - tinguished Ученый, человек американской Ассоциации для Продвижения Науки (AAAS), Ученого Fulbright и человека IEEE. Он - получатель Общества эпохи компьютеризации IEEE Техническая Премия Успеха, Признание ACM Сервисной Премии и Премии Водоема за Передовой опыт в Студенческом Обучении.

Предисловие

xiii

Роберто Тамассиа получил степень доктора философии в Электротехнике и Вычислительной технике из Университета Иллинойса в Равнине Урбаны в 1988. Он - профессор Plastech Информатики и Председатель Отдела Компьютерной Науки - ence в Университете Брауна. Он - также директор Центра Брауна Геометрического Вычисления. Его исследовательские интересы включают информационную безопасность, криптографию, анальную - ysis, дизайн и внедрение алгоритмов, рисунка графа и вычислительной геометрии. Он - Член IEEE и получатель Технической Премии Успеха от Общества эпохи компьютеризации IEEE для руководства областью рисунка графа. Он - редактор нескольких журналов в алгоритмах графа и геометрическом. Он ранее служил на редакционной коллегии Сделок IEEE на Компьютерах.

Дэвид Мунт получил степень доктора философии в Информатике в Университете Пердью в 1983. Он в настоящее время - преподаватель в Факультете информатики в Университете Мэриленда с совместным назначением в университете Мэри - Институт земли Передовых Компьютерных Исследований. Он - младший редактор для Сделок ACM на Математическом программном обеспечении и Международном журнале Геометрии Compu-tational и Заявлениях. Он - получатель двух Признаний ACM Сервисных Премий.

В дополнение к их выполнениям исследования у авторов также есть обширный опыт в классе. Например, доктор Гудрич преподавал структуры данных и курсы алгоритмов, включая Структуры данных как курс уровня новичка-второкурсника и Введение в Алгоритмы как курс верхнего уровня. Он заработал sev-eral обучающие премии в этой способности. Его обучающий стиль должен вовлечь студентов в оживленные интерактивные сессии класса, которые производят интуицию и понимание позади структурирования данных и алгоритмических методов. Доктор Тамассия преподавал Данным Struc-tures и Алгоритмы как вводный курс нового уровня с 1988. Одной вещью, которая поместила его обучающий стиль отдельно, является его эффективное использование интерактивных гипер - представления СМИ, объединенные с Сетью. Доктор Мунт преподавал и Структуры данных и курсы Алгоритмов в Университете Мэриленда с 1985. Он получил много обучающих премий из Университета Пердью, Университета Мэриленда и Гонконгского университета Науки и техники. Его примечания лекции и упражнения домашней работы для курсов, которые он вел, широко используются в качестве дополнительного учебного материала студентами и преподавателями в других университетах.

Признание

Есть много людей, которые сделали вклады в эту книгу.

Мы благодарны всем нашим сотрудникам исследования и обучающим помощникам, которые обеспечили обратную связь на ранних проектах глав и помогли нам в развитии упражнений, программного обеспечения и систем мультипликации алгоритма. Было много друзей и коллег, комментарии которых имеют, приводят к улучшениям текста. Мы особенно благодарны Майклу Голдвассеру для его многих ценных предложений.

xiv

Предисловие Мы также благодарны Карен Гудрич, Искусство Moorshead, Скотт Смит и Айоэннис Толлис для их проницательных комментариев.

Мы также действительно обязаны внешним рецензентам и читателям для их co - набожные комментарии, электронные письма и конструктивная критика, которые были чрезвычайно использованием - ful в написании этого выпуска. Мы определенно благодарим следующих рецензентов за их комментарии и предложения: Divy Agarwal, Калифорнийский университет, Бар Санты - bara; Терри Андрес, университет Манитобы; Бобби Блумоуф, университет Техаса, Остина; Майкл Клэнси, Калифорнийский университет, Беркли; Ларри Дэвис, Univer-sity Мэриленда; Скотт Дрисдэйл, Дартмутский колледж; Arup Guha, университет Центральной Флориды; Крис Ингрэм, университет Ватерлоо; Стэн Квасни, Вашингтонский университет; Келвин Лин, университет Техаса в Остине; Джон Марк Мерсер, университет Макгилла; Лорент Мишель, Университет Коннектикута; Леонард Майерс, Политехнический университет штата Калифорния, Сан-Луис-Обиспо; Дэвид Номан, Технологический институт Стивенса; Роберт Пэстель, Мичиганский технологический университет; Бина Рама - murthy, SUNY Буффало; Кен Слоннеджер, университет Айовы; К.В. Рэвишэнкэр, Мичиганский университет; Вэл Таннен, Университет Пенсильвании; Пол Ван Ар - ragon, Колледж Мессии; и Кристофер Уилсон, университет Орегона.

Мы благодарны нашему редактору, Бет Голуб, для ее восторженной поддержки этого проекта. Команда в Вайли была великой. Большое спасибо идет к Майку Берлину, Лил - ian Брэди, Регина Брукс, Пол Крокетт, Ричард Делорензо, Джен Девайн, Саймон Дюркин, Мишлин Фредерик, Лайза Ги, Кэтрин Хепберн, Рэйчел Леблонд, - dre Легаспи, Мэделин Лесьюр, Франк Лайман, Хоуп Миллер, Бриджит Морриси, Крис Руель, Кен Сэнтор, Лорен Сэпира, Дэн Сэйри, Диана Смит, Брюс Спэц, Дон Стэнли, Джери Уорнер и Билл Зобрист.

Вычислительные системы и превосходный штат технической поддержки в факультетах информатики в Университете Брауна, Калифорнийском университете, Ирвине и Уни-versity Мэриленда дали нам надежные производственные условия. Эта рукопись была подготовлена прежде всего с LTEX набирание пакета. A

Наконец, мы хотели бы тепло благодарить Изабель Круз, Карен Гудрич, Жанин

Гора, Джузеппе Ди Баттиста, Франко Препарата, Ioannis Tollis и наши родители для того, чтобы предоставить консультацию, поддержку и поддержку на различных стадиях подготовки этой книги. Мы также благодарны за то, что они напоминают нам, что есть вещи в жизни вне написания книг.

Майкл Т. Гудрич

Роберто Тамассиа

Дэвид М. Мунт

Содержание

1 C ++ учебник для начинающих

1

1.1 Основной C ++ программирование элементов........

.

.

.

.

.

.

.

2

1.1.1 Простой C ++ программа...........

.

.

.

.

.

.

.

2

1.1.2 Фундаментальные типы.............

.

.

.

.

.

.

.

4

1.1.3 Указатели, множества и структуры......

.

.

.

.

.

.

.

7

1.1.4 Названные константы, объем и Namespaces

.

.

.

.

.

.

.

13

1.2 Выражения.....................

.

.

.

.

.

.

.

16

1.2.1 Изменение типов через кастинг......

.

.

.

.

.

.

.

20

1.3 Поток контроля....................

.

.

.

.

.

.

.

23

1.4 Функции......................

.

.

.

.

.

.

.

26

1.4.1 Передача параметров..............

.

.

.

.

.

.

.

28

1.4.2 Overloading и Inlining..........

.

.

.

.

.

.

.

30

1.5 Классы.......................

.

.

.

.

.

.

.

32

1.5.1 Структура класса...............

.

.

.

.

.

.

.

33

1.5.2 Конструкторы и печи для сжигания отходов производства........

.

.

.

.

.

.

.

37

1.5.3 Классы и распределение памяти.......

.

.

.

.

.

.

.

40

1.5.4 Друзья класса и участники класса......

.

.

.

.

.

.

.

43

1.5.5 Стандартная библиотека шаблона.......

.

.

.

.

.

.

.

45

1.6 C ++ программа и организация файла.......

.

.

.

.

.

.

.

47

1.6.1 Программа в качестве примера............

.

.

.

.

.

.

.

48

1.7 Написание C ++ программа..............

.

.

.

.

.

.

.

53

1.7.1 Дизайн....................

.

.

.

.

.

.

.

54

1.7.2 Псевдокодекс................

.

.

.

.

.

.

.

54

1.7.3 Кодирование....................

.

.

.

.

.

.

.

55

1.7.4 Тестирование и отладка...........

.

.

.

.

.

.

.

57

1.8 Упражнения......................

.

.

.

.

.

.

.

60

2 ориентированных на объект дизайна

65

2.1 Цели, принципы, и

Образцы....

.

.

.

.

.

.

.

.

.

.

.

.

66

2.1.1 Ориентированный на объект

Цели дизайна..

.

.

.

.

.

.

.

.

.

.

.

.

66

2.1.2 Ориентированный на объект

Принципы разработки

.

.

.

.

.

.

.

.

.

.

.

.

67

2.1.3 Шаблоны

..........

.

.

.

.

.

.

.

.

.

.

.

.

70

xv