Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

книги / Программирование на языке Си

..pdf
Скачиваний:
15
Добавлен:
12.11.2023
Размер:
17.16 Mб
Скачать

544

Программирование на языке Си

В конкретном задании (см. ниже) информационная динами­ ческая структура может быть списком, бинарным деревом, сте­ ком или деревом с особым строением узлов и связей. В зависимости от типа конкретной информационной структуры могут быть целесообразны разные операции по ее обработке. Ниже приведены три группы вариантов динамических структур, и для каждой группы предложен список функций, реализующих подходящий набор операций.

10.8.1. Списки

Разработать комплекс функций для обслуживания сложных структур данных в виде разнообразных списков: однонаправ­ ленных, двунаправленных, с ключами, без ключей, кольцевых, неоднородных и т.п.

В помещенных ниже изображениях используются следую­ щие обозначения: D - данные, next (либо N) - указатель на сле­ дующий элемент, Р - указатель на предыдущий элемент; К - ключ; begin - указатель на начало списка.

Вариант 1. Однонаправленный список

begin—И D | next 4

D | next

D NULL

Вариант 2. Однонаправленный список из элементов с клю­ чами

begin- К D next-

К D next-

К D NULL

Вариант 3. Кольцевой список

begin

Вариант 4. Кольцевой список из элементов с ключами

begin —»{К 1Р~ next-

К D next-

К D next-

Глава 10. Задачи по программированию

545

Вариант 5. Двунаправленный список с элементами без клю­

чей

 

 

 

 

 

 

begin-

NULL D N

D

N"

P

D

NULL

Вариант 6. Двунаправленный / список

из элементов с клю­

чами

 

 

 

 

 

 

begin—4~NULL | К | D I N l r f 'p '

К D

Nth±fP~l К

D

NULL

Вариант 7. Однонаправленный неоднородный (гетероген­

ный) список с однородными подспйсками

 

 

begin—►Тип 1 Щ - » |Тип 1|

»|Тип 11 NN----1

1—НТип2| N4» |Тип2| N

Тип 2

 

С Тип К N-

 

4

2

Тип К N-

Тип К NULL

Вариант 8. Однонаправленный неоднородный (гетероген­ ный) список с однородными подсписками из элементов клю­

чами

 

 

begin НтйгГТ K [N --*■Тип 1

К| N

Тип 1 К N

Тип 2 К N --> Тип 2

К N

Тип 2 К N

*■Тип К К N" ”*■ Тип К К N

Тип К К NULL

1/235-3124

546

Программирование на языке Си

Вариант 9. Кольцевой неоднородный (гетерогенный) список с однородными подсписками

begin

Вариант 10. Кольцевой неоднородный (гетерогенный) спи­ сок с однородными подсписками из элементов с ключами

begin

Тип 1 К

Тип 1 К

Тип 1 К

 

Тип 2

Тип 2

Т-+~т-*-Тип2

 

 

 

3

 

Тип К

Тип К

Тип К

Вариант 11. Двунаправленный неоднородный (гетероген­ ный) список с однородными подсписками

begin —4тип 1 N~~tj~* Тип l| N~ j* ..j^ ffan T

а

L » [Тип 2| NT7»| Тип 2| NУ

Ь

С |Т и п К| Nfcfrmi К| N

д а и й KlNULL

Глава 10. Задачи по программированию

547

Вариант 12. Двунаправленный неоднородный (гетероген­ ный) список с однородными подсписками из элементов с клю­ чами

begin—»(тйп llK|N~t^

ffkn

 

~Д,Тип l|K|N*•

Тип 2 К N"

.Тип

2 К N

Тип 2 К N

 

 

 

t 3

н Тип КIКIbrfct j-Тип KjKTN^

..3 $ Тип К| К|NUIX

В программах для приведенных вариантов заданий исполь­ зуйте следующие обозначения:

begin - указатель на начало списка;

D- поле данных (строка произвольной длины либо указатель на строку);

К- поле ключа - дополнительное поле элемента спи­ ска, заполняемое уникальным значением. Правило формирования ключа предлагается выбрать само­ стоятельно. Простейшие варианты ключей:

номер элемента в списке;

номер элемента при его создании;

N, next - указатель на следующий элемент списка;

Р- указатель на предыдущий элемент списка;

NULL - нулевой указатель (используется, если для кон­ кретного элемента списка отсутствуют последую­ щий или предыдущий элементы).

Для каждого из вариантов необходимо разработать следую­ щие функции:

1.Создание {пустого списка).

2.Добавление элемента:

в начало списка;

в конец списка;

после элемента с заданным номером;

1/г35’

548

Программирование на языке Си

(*) после элемента с заданным ключом.

3.Печать списка (вывод на экран дисплея):

номер элемента;

содержимое поля данных;

(*) содержимое поля ключа;

значение указателя на следующий элемент;

(**) значение указателя на предыдущий элемент.

4.Удаление элемента из списка:

из начала;

из конца;

с заданным номером;

(*) с заданным ключом.

5.Запись списка в файл.

6.Уничтожение списка.

7.Восстановление (чтение) списка из файла.

8.Упорядочение элементов в списке по выбранному признаку:

используя информацию в поле данных;

(*) используя информацию в поле ключа.

9.Изображение структуры списка на экране дисплея.

Примечания:

1.Звездочкой С") обозначены функции списков для эле­ ментов с ключами.

2.Двумя звездочками (**) обозначены функции для дву­ направленных списков.

3.Для неоднородных списков функции обслуживания должны разрабатываться применительно, к определенному однородному подсписку.

Вариант 13. Стек.

Глава 10. Задачи по программированию

549

Необходимо разработать следующие функции:

1.Создание пустого стека.

2.Добавление элемента в стек.

3.Печать стека (вывод на дисплей).

4.Извлечение (удаление) элемента из стека.

5.Запись стека в файл.

6.Уничтожение стека.

7.Восстановление (чтение) стека из файла.

8.Упорядочивание элементов в стеке по выбранному при­ знаку (использовать содержимое поля данных).

9.Изображение структуры стека на экране.

10.8.2. Деревья

Бинарное дерево.

Каждая вершина бинарного дерева содержит:

2 указателя (на каждый альтернативный путь поиска - на поддерево);

данные - указатель на объект, содержащий данные, при­ надлежащие этой вершине.

Для реализации структур данных типа дерева предлагаются 4 варианта (А, Б, В и Г) их организации:

Вариант 1 (А)

Рис. 10.2. Древовидная структура типа А

550

Программирование на языке Си

В древовидной

структуре типа А, представленной на

рис. 10.2, каждая вершина содержит 3 поля: поле данных и два поля указателей на другие вершины. Левый указатель служит для ссылки на вершину нижнего уровня, а правый - на сосед­ нюю вершину того же уровня. Указателям, не ссылающимся на другие вершины, присваивается значение NULL (на рис. 10.2 они помечены крестиками).

Вариант 2 (Б)

Рис. 10.3. Древовидная структура типа Б

Древовидная структура, типа Б (рис. 10.3) строится из вер­ шин, состоящих из двух полей: поля данных и указателя. Указа­ тель ссылается на вспомогательный список, с помощью которого устанавливается связь текущей вершины с вершиной нижнего уровня. Каждый элемент этого списка содержит указа­ тели на соседний Элемент вспомогательного списка и на одну вершину нижнего уровня.

Вариант 3 (В)

А

с 1ХХГХ1

D ГХ1ХХ

к

Е 1ХМХРЧЛХХХ

Рис.10.4. Древовидная структура типа В

Глава 10. Задачи по программированию

551

В древовидной структуре типа В (рис. 10.4) вершина состоит всегда из 4 элементов: поля данных и 3 указателей на возмож­ ные вершины нижнего уровня. Указателям, не ссылающимся на вершины, присваивается значение NULL.

Вариант 4 (Г)

Рис.10.5. Древовидная структура типа Г

В древовидной структуре типа Г (рис. 10.5) каждая вершина содержит следующие поля:

поле данных;

поле, в котором указано число координирующих вспомога­ тельных полей;

вспомогательные поля, содержащие указатель на вершину более высокого уровня (предыдущую) и указатели на вер­

шины нижнего уровня.

Если с текущей вершиной не связаны вершины нижнего уровня, то в структуре даннь!х, описывающей вершину, соот­ ветствующие вспомогательные поля отсутствуют. Для корневой вершины нет вершины более высокого уровня, поэтому соот­ ветствующему указателю (помечен как 'х') должно быть при­ своено значение NULL.

Для каждого из приведенных выше вариантов необходимо разработать следующие функции:

1.Создание пустого дерева.

2.Добавление вершины к указанной вершине дерева.

552

Программирование нв языке Си

3.Распечатка (вывод на дисплей) структуры дерева.

4.Удаление заданного элемента из дерева с уничтожением поддерева подчиненных вершин.

5.Запись дерева в файл.

6.Уничтожение дерева.

7.Восстановление (чтение) дерева из файла.

8.Изображение структуры дерева на экране.

ПРИЛОЖЕНИЕ 1

Т аблиц ы кодов A SC II

Таблица П1.1

Коды управляющих символов (0 -г- 31)

Символ Код to Код 08 Код 16 Клавиши

Значение

nul

0

0

00

soh

l

1

01

stx

2

2

02

etx

3

3

03

eot

4

4

04

enq

5

5

05

aek

6

6

06

bel

7

7

07

bs

8

10

08

ht

9

11

09

if

10

12

0A

vt

11

13

0B

ff

12

14

OC

cr

13

15

0D

so

14

16

0E

si

15

17

OF

die

16

20

10

del

17

21

11

do2

18

22

12

dc3

19

23

13

dc4

20

24

14

nak

21

25

15

syn

22

26

- 16

etb

23

27

17

can

24

30

18

em

25

31

19

sub

26

32

1A

esc

27

33

IB

fs

28

34

1C

gs

29

35

ID

rs

30

36

IE

US

31

37

IF

A<?

Нуль

AA

Начало заголовка

AB

Начало текста

Ac

Конец текста

AD

Конец передачи

AE

Запрос

Af

Подтверждение

AG

Сигнал (звонок)

AH

Забой (шаг назад)

1 A*

Горизонтальная табуляция

AJ

.Перевод строки

AK

Вертикальная табуляция

AL

Новая страница

AM

Возврат каретки

AN

Выключить сдвиг

A0

Включить сдвиг

AP

Ключ связи данных

AQ

Управление устройством 1

AR

Управление устройством 2

AS

Управление устройством 3

Arp

Управление устройством 4

AU

Отрицательное подтверждение

Av

Синхронизация

Aw

Конец передаваемого блока

Ax

Отказ

AY

Конец среды

Az

Замена

At

Ключ

A\

Разделитель файлов

A]

Разделитель группы

AA

Разделитель записей

A

Разделитель модулей

В графе "Клавиши" обозначение Асоответствует нажатию клавиши Ctrl, вместе с которой нажимается соответствующая "буквенная" кла­ виша, формируя код символа.

З6“3’24

Соседние файлы в папке книги