Файл: Алгоритмы и структуры данных-Кр-ИВТ-3у-Назаренко.pdf

ВУЗ: Не указан

Категория: Задание

Дисциплина: Программирование

Добавлен: 21.10.2018

Просмотров: 1430

Скачиваний: 21

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

 

Контрольная работа по дисциплине «Алгоритмы и структуры данных» 

 

1. Выбрать тип списка по варианту. 

2. Выбрать тип хранимых данных. 

3. Сформировать тип звена списка для заданного типа списка. 

4. Выбрать из имеющегося набора процедуру добавления звена для заданного типа списка. 

5. Выбрать из имеющегося набора процедуру удаления звена для заданного типа списка. 

6. Выбрать из имеющегося набора процедуру поиска звена для заданного типа списка. 

7. Разработать процедуру просмотра списка. 

8. Создать ведущее звено для заданного типа списка. 

9. Выбрать из имеющегося набора процедуру сортировки массива по варианту. 

 

Вариант выбирается по двум последним цифрам номера студенческого билета AB

Хранящиеся в списке данные выбираются по сумме цифр A и B (см. таблицу), если A+B = 0, то 

выбирается вариант 10

1  Целые числа (int

10  Знаковые целые числа (signed int

2  Знаковые символы (signed char

11  Беззнаковые целые числа (unsigned int

3  Длинные целые числа (long

12  Длинные беззнаковые целые числа 

4  Действительные числа (float

13  Действительные числа (long float

5  Действительные числа (long double

14  Знаковые символы (signed char

6  Короткие целые числа (short

15  Беззнаковые целые числа (unsigned int

7  Действительные числа (double

16  Действительные числа (float

8  Символы (char

17  Короткие целые числа (short

9  Беззнаковые символы (unsigned char

18  Действительные числа (double

 
Тип списка определяется по младшей цифре 4-ричного кода, соответствующего сумме цифр 

A и B

(A+B)

4

 

Тип списка 

Односвязный кольцевой 
Односвязный линейный 
Двусвязный кольцевой 
Двусвязный линейный 

 


background image

 

Соответствие между 10-тичным и 4-ричным кодами приведено в таблице 

(A+B)

10

 

0   1 

10 

11  12  13  14  15  16  17  18 

(A+B)

4

 

10  11  12  13  20  21 

22 

23  30  31  32  33  40  41  42 

 
Метод сортировки определяется по B (последняя цифра номера), если B больше 4, то по B – 5

B Метод сортировки 
0 Отбор 
1 Вставка 
2 Пузырьковая 
3 Быстрая сортировка 
4 Метод Шелла 

 
Показанные процедуры работы со списками и сортировки приведены только в качестве образца 
и  могут  не  совпадать  по  именам  типов,  переменных  и  типам  полей  записей  с  выбранными 
студентом. 

 
Процедуры добавления звена 

void i1(Link* Pred, int data) 

  Link* Loc = new Link; 

  Loc->Value = data; 

  Loc->next = Pred->next; 

  Pred->next = Loc; 

 

void i2(Link* Pred, int data) 

  Link* Loc = new Link; 

  Loc->Value = data; 

  Loc->next = Pred->next; 

  Loc->prev = Pred; 

  Pred->next = Loc; 

  if (Loc->next) 

    Loc->next->prev = Loc; 

 


background image

 

void i3(Link* Pred, int data) 

  Link* Loc = new Link2; 

  Loc->Value = data; 

  Loc->next = Pred->next; 

  Loc->prev = Pred; 

  Pred->next = Loc; 

  Loc->next->prev = Loc; 

 

Процедуры удаления звена 

void d1(Link* Pred) 

  Link* Loc; 

  if (Pred->next) 

  { 

    Loc = Pred->next; 

    Pred->next = Loc->next; 

    delete Loc; 

  } 

 

void d2(Link* Pred) 

  Link* Loc; 

  Loc = Pred->next; 

  Pred->next = Loc->next; 

  delete Loc; 

 

 

 

 

 


background image

 

void d3(Link* Del) 

  Del->prev->next = Del->next; 

  if (Del->next) 

    Del->next->prev = Del->prev; 

  delete Del; 

 

void d4(Link* Del) 

  Del->prev->next = Del->next; 

  Del->next->prev = Del->prev; 

  delete Del; 

 

Процедуры поиска звена 

int p1(Link* Start, Link*& Find, Link*& Pred, int Key) 

  Link* Cur = Start->next; 

  Pred = Start; 

  int Success = 0; 

  while (Cur && !Success) 

  { 

    if (Cur->Value == Key) 

    { 

      Find = Cur; 

      Success = 1; 

      break; 

    } 

    Pred = Cur; 

    Cur = Cur->next; 

  } 

  return Success; 


background image

 

 

int p2(Link* Start, Link*& Find, Link*& Pred, int Key) 

  Link* Cur = Start->next; 

  Pred = Start; 

  int Success = 0; 

  while (Cur != Start && !Success) 

  { 

    if (Cur->Value == Key) 

    { 

      Find = Cur; 

      Success = 1; 

      break; 

    } 

    Pred = Cur; 

    Cur = Cur->next; 

  } 

  return Success; 

 

int p3(Link* Start, Link*& Find, int Key) 

  Link* Cur = Start->next; 

  int Success = 0; 

  while (Cur && !Success) 

  { 

    if (Cur->Value == Key) 

    { 

      Find = Cur; 

      Success = 1; 

      break; 

    } 

    Cur = Cur->next; 

  }