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

Программирование на языке Си. Методические рекомендации и задачи по программированию

.pdf
Скачиваний:
0
Добавлен:
09.08.2026
Размер:
457 Кб
Скачать

1.340000

18

212.000000

24

Мотыл¸к

С.Ротару

1.240000

17

211.000000

25

Скрипка

В.Меладзе

1.230000

15

190.000000

26

Никто

А.Свиридова

1.430000

16

178.000000

27

Îäíà

А.Варум

1.200000

14

179.000000

28 Ой_Л¸ха А.Апина 1.150000 12 198.000000 29 Осень А.Варум 1.240000

111

16

215.000000

30

Осень

Å.Îñèí

1.190000

15

213.000000

31

Офицеры

О.Газманов

1.310000

18

240.000000

32

Паромщик

А.Пугач¸ва

1.120000

14

196.000000

33

Петруха

А.Укупник

1.110000

13

189.000000

34

Плачет

Å.Îñèí

1.170000

15

198.000000

35

Поворот Машина_времени 1.180000 16

112

205.000000

36

Помилуй

Ëþáý

1.230000

17

209.000000

37

Поцелуй

Íèêà

1.240000

18

195.000000

38

Привет

И.Аллегрова

1.110000

16

167.000000

39

Прости

Л.Долина

1.120000

17

178.000000

40

Прощай

Л.Лещенко

1.150000

15

189.000000

41 Пять_минут Л.Гурченко 1.210000 17 201.000000

113

42

Россия

И.Тальков

1.130000

15

176.000000

43

Ñàìà

И.Аллегрова

1.060000

16

187.000000

44

Самол¸т

Валерия

1.090000

12

165.000000

45

Свеча

И.Аллегрова

1.210000

16

189.000000

46

Птица Машина_времени 1.240000 17 196.000000 47 Тайга

Агата_Кристи 1.250000 18 197.000000

114

48

Ñëåä

гр.Лицей

1.300000

16

215.000000

49

Снег Машина_времени 1.170000 14 189.000000 50 Мальчик Т.Буланова 1.250000 18 203.000000 51 Король

Машина_времени 1.140000 16 194.000000 52 Суженый

И.Аллегрова

1.250000

14

189.000000

53

Ñýðà

В.Меладзе

1.240000

15

197.000000

115

Задача 3.4. Пример на двусвязный список

Работа с двусвязным списком описана выше

//Реализация списка в виде двусвязного списка

//Реализовано А. Г. Минаком

#include <stdio.h>

#include <alloc.h>

#include <stdlib.h>

#include <conio.h>

#include <string.h>

#include <graphics.h>

#define DLLIST struct dllist

#define TRUE 1

#define FALSE 0

FILE *bazi; int n=0; FILE *f1; DLLIST

{

int tag;

DLLIST * previous; DLLIST * next;

int nomer; char fam[25]; char adres[25]; int tel;

int god; int grupa; };

DLLIST * LIST; void lin (int y,int y1)

{

line(50,y,56,y);

line(56,y,56,y1);

line(56,y1,50,y1);

line(50,y1,50,y);

}

116

void grap()

{

int gdriver=DETECT,gmode,errorcode; initgraph(&gdriver,&gmode,""); errorcode=graphresult();

if (errorcode != grOk)

{

printf(''Graphics error: %s\n'', grapherrormsg(errorcode)); printf(''Press any key to halt'');

getch();

exit(1);

}

}

// -------

void menu()

{

textcolor(0);

clrscr();

cleardevice();

puts (''\n Создать новый список'');

puts (''Удалить элемент списка по номеру мед. карты''); puts ('' Определить, пуст ли список'');

puts ('' Выдать значение элемента по ключу'');

puts ('' Выдать ключ по значению элемента в списке''); puts ('' Сделать список пустым'');

puts ('' Вывести элементы списка''); puts ('' Сохранить файл'');

puts ('' Открыть файл'');

puts ('' Очистить базу данных''); puts ('' Добавить новые записи''); puts ('' Сортировка записи''); settextstyle(0,0,2);

textcolor(15);

outtextxy (30,300,"Для выхода из программы нажмитеESC");

}

117

void HEAD()

{

textcolor(15);

puts(''\n –––T––––––––-T–––––––-T–––––––T–––––T––––-¬'');

puts(''| Номер | Фамилия | Домашний | Год рождения | Телефон | Группа- |'');

puts(''| мед. | Имя | адрес | | | крови |''); puts(''| карты | Отчество | | | | |'');

puts('' +––-+––––––––-+–––––––-+–––––––+–––––+––––-+'');

}

//-------- Функция определения - пуст ли список (EMPTY) --------

int EMPTY(DLLIST *L)

{

DLLIST *cur=L; if (!cur)

return (TRUE); else

return (FALSE);

}

//--------- Функция вставки элемента списка (INSERT) ----------

void INSERT (DLLIST *t , DLLIST ** L)

{

DLLIST *cur=*L; DLLIST *pr=0; DLLIST *now;

now=(DLLIST*)malloc(sizeof(DLLIST));

*now=*t; while (cur!=0)

{

pr=cur; cur=cur->next;

}

//now->previous=cur; //pr=cur; //cur=cur->next; now->next=cur;

if (pr==0) *L=now;

118

else

{

pr->next=now; cur->previous=now; now->previous=pr; now->next=cur;

}

}

// ---- Функция удаления элемента списка по заданному ключу (DELETE) ----

void DELETE (int tag_d, DLLIST ** L)

{

DLLIST *cur=*L; DLLIST *pr=0;

while ((cur)&&(cur->nomer!=tag_d))

{

pr=cur; cur=cur->next;

}

if (!cur)

{

printf ("\n Элемент списка не удается удалить\n"); return;

}

if (!pr) *L=cur->next;

else

{

pr->next=cur->next; cur->next->previous=pr;

}

free(cur);

}

// ------ Функция поиска ключа по элементу списка (LOCATE) ------

int LOCATE (char * value, DLLIST * L)

{

DLLIST *cur=L;

119

if (!cur)

{

printf (''\n Список пуст \n''); return(0);

}

while ((cur)&&(strcmp(cur->fam,value)!=0)) cur=cur->next;

if (!cur)

{

printf (''\n Элемент не найден \n''); return(0);

}

else return(cur->tag);

}

//---- Функция поиска элемента списка по ключу (RETRIEVE) ----

char * RETRIEVE (int tag_s, DLLIST * L)

{

DLLIST *cur=L; if (!cur)

return (" Список пуст "); while ((cur)&&(cur->tag!=tag_s))

cur=cur->next; if (!cur)

return (" Элемент не найден "); else

return(cur->fam);

}

//------ Функция, делающая список пустым (MAKENULL) ------

void MAKENULL (DLLIST **L)

{

DLLIST * cur=*L; DLLIST * pr=0; while (cur)

{

pr=cur; cur=cur->next;

120

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]