Пиши Дома Нужные Работы

Обратная связь

Пример создания и работы с двухсвязным списком.

 

#include <stdio.h>

#include <conio.h>

#include <alloc.h>

#include <string.h>

struct spis

{ char data[20];

struct spis *v1; // v1 – указатель на предыдущую структуру

struct spis *v2; // v2 – указатель на последующую структуру

};

void create(void); // создание

void list(spis *); // просмотр

void del(void); // удаление

struct spis *head,*tail; // указатели на начало и конец списка

main()

{

clrscr();

create();

list(head); // просмотр с начала списка

list(tail); // просмотр с конца списка

del();

list(head);

free(head);

}

void create(void)

{ spis *p,*pred;

pred=NULL;

do { p=(spis *)malloc(sizeof(spis));

printf("Фамилия: "); gets(p->data);

p->v1=pred;

if (pred != NULL)

pred->v2=p;

else

head=p;

pred=p;

puts(" Закончить - <esc>");

}

while (getch()!=27);

tail=p;

tail->v2=NULL;

}

void list(spis *p)

{ if (p==head)

while (p != NULL)

{ puts(p->data);

p=p->v2;

}

else if (p==tail)

while ( p!= NULL)

{ puts(p->data);

p=p->v1;

}

else

puts("Неверный адрес ");

getch();

}

void del(void)

{ spis *p,*temp;char f[20]; // f[20] – Строка для удаляемой фамилии

clrscr();

printf("Фамилия: "); gets(f);

p=head;

while (p!=NULL)

{ if (strcmp((p->data), f)==0) // если найдена заданная фамилия

{ if (p==head) // если найденная запись - первая

{ head=p->v2;

head->v1=NULL;

free(p);

p=head;

}

else if (p==tail) // если найденная запись - последняя

{ tail=p->v1;

tail->v2=NULL;

free(p);

p=tail;

}

else // удаление из средины списка

{ p->v2->v1=p->v1;

p->v1->v2=p->v2;

temp=p;

p=p->v2;

free(temp);

}

}

else // если заданная фамилия не найдена – продвигаемся по списку

p=p->v2;

}

}

 

Чтобы вставить новую структуру в двухсвязный список, также необходимо изменить только значения указателей. Пусть требуется вставить структуру перед найденной по заданному условию ; p – указатель на найденную структуру:

 

pn=(spis *)malloc(sizeof(spis)); // pn – указатель на новую структуру

gets(pn->data);

// если структура вставляется в средину списка



pn->v1=p->v1;

pn->v2=p;

p->v1->v2=pn;

p->v1=pn;

// если структура вставляется в начало списка

pn->v1=NULL;

pn->v2=p;

p->v1=pn;

head=pn;

// если структура вставляется в конец списка

pn->v1=tail;

pn->v2=NULL;

p->v2=pn;

tail=pn;

 

ВЫПОЛНЕНИЕ РАБОТЫ

4.1. Проанализировать приведенные программы.

4.2. Сформировать двухсвязный список и выполнить задание по своему варианту.

 

Варианты заданий

1. Структура содержит фамилию и 4 оценки. Удалить из списка неуспевающих.

2. Структура содержит фамилию и 4 оценки. Удалить из списка имеющих 2 или 3.

3. Структура содержит название книги, автора, год издания. Удалить издания с годом меньше заданного.

4. Структура содержит название книги, автора, год издания. Удалить книги заданного автора.

5. Структура содержит название, цену, количество товара. Удалить из списка заданный товар.

6. Структура содержит название, цену, количество товара. Удалить из списка партии товара, превышающие заданную стоимость.

7. Структура содержит фамилию, год рождения. Добавлять новые записи так, чтобы список был упорядочен по алфавиту.

8. Структура содержит фамилию, год рождения. Добавлять новые записи так, чтобы список был упорядочен по возрасту.

9. Структура содержит название издания, газета или журнал, цена экземпляра. Добавлять новые записи так, чтобы сначала располагались журналы, затем газеты.

10. Структура содержит название издания, газета или журнал, цена экземпляра. Добавлять новые издания так, чтобы названия были упорядочены по алфавиту.

11. Структура содержит фамилию спортсмена, вид спорта, количество очков. Добавлять новые записи так, чтобы информация по каждому виду спорта располагалась последовательно.

12.Структура содержит фамилию спортсмена, вид спорта, количество очков.

Добавлять новые записи так, чтобы они были упорядочены по убыванию

очков.

 

КОНТРОЛЬНЫЕ ВОПРОСЫ

5.1. Понятие статической и динамической памяти.

5.2. Как создаётся и просматривается односвязный список?

5.3. Как создаётся и просматривается двухсязный список?

5.4. Как удалить структуру из списка?

5.5. Как добавить структуру в список?

ЛИТЕРАТУРА

1. Подбельский В. В., Фомин С. С. Программирование на языке Си: Учеб. пособие. – 2-е доп. изд. – М.: Финансы и статистика, 2005. - 600с.

2. Керниган Б., Ритчи Д. Язык программирования Си / Пер. с англ. – М.: Финансы и статистика, 1992. – 272 с.

3. Уэйт М., Прата С., Мартин Д. Язык Си. Руководство для начинающих / Пер. с англ. – М.: Мир, 1988. – 512 с.

4. Уинер Р. Язык Турбо Си / Пер. с англ. – М.: Мир, 1991. – 380 с.

 

Игорь Владимирович Перцев

Вера Александровна Перцева

 

Программирование на языках высокого уровня

Язык программирования Си

 

 

Методические указания

 

Редактор: А. Н. Фионов

Корректор: Д. С. Шкитина

 

Подписано в печать

Формат бумаги 62х84 1/16, отпечатано на ризографе, шрифт №10,

Изд. л. , заказ № , тираж – 300 экз., СибГУТИ

630102, Новосибирск, ул. Кирова, 86






ТОП 5 статей:
Экономическая сущность инвестиций - Экономическая сущность инвестиций – долгосрочные вложения экономических ресурсов сроком более 1 года для получения прибыли путем...
Тема: Федеральный закон от 26.07.2006 N 135-ФЗ - На основании изучения ФЗ № 135, дайте максимально короткое определение следующих понятий с указанием статей и пунктов закона...
Сущность, функции и виды управления в телекоммуникациях - Цели достигаются с помощью различных принципов, функций и методов социально-экономического менеджмента...
Схема построения базисных индексов - Индекс (лат. INDEX – указатель, показатель) - относительная величина, показывающая, во сколько раз уровень изучаемого явления...
Тема 11. Международное космическое право - Правовой режим космического пространства и небесных тел. Принципы деятельности государств по исследованию...



©2015- 2024 pdnr.ru Все права принадлежат авторам размещенных материалов.