Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Динамическое распределение памяти, создание списка⇐ ПредыдущаяСтр 11 из 11
Цель работы – овладение навыками использования динамического распределения памяти, создания списков с размещением их в динамической памяти.
Задания для самостоятельной подготовки: 1. Изучить: - возможности языка программирования для динамического распределения памяти; - принципы создания списков и размещение их в динамической памяти. 2. Разработать алгоритм решения в соответствии с заданием. 3. Составить программу решения задачи. 4. Подготовить тестовый вариант исходных данных. Выполнить на ЭВМ программу с тестовым вариантом.
Задание к работе: Задание А. Разместить в динамической памяти список элементами которого являются структуры, состоящие из полей в соответствии с вариантом задания из таблицы 16. Вывести информацию из ДП на экран.
Задание Б. Модернизировать программу размещения в ДП списка, таким образом, чтобы список размещался с одновременным упорядочиванием по полю в соответствии с вариантом задания из таблицы 16. Организовать возможность удаления элементов списка по вводимому с клавиатуры значению поля, по которому производилось упорядочивание. Таблица 16
Продолжение таблицы 16
Продолжение таблицы 16
Пример выполнения работы Задание А. Разместить в динамической памяти список элементами которого являются структуры, состоящие из полей: - название книги; - автор; - год выпуска. Вывести информацию из ДП на экран.
Программа решения задачи имеет вид:
#include<stdio.h> #include<stdlib.h> #include<conio.h> #include<alloc.h> #include<string.h>
void main() { char b,q[20]; // b – для считывания символа, нажатого на клавиатуре, //q – вспомогательная строка struct sv { char a[20]; int year; char naz[20]; struct sv* p; } *nov, *pred; //указатели на структуру sv, состоящую из полей a – автор, //year – год издания, naz – название книги, p – адрес предыдущего элемента списка clrscr(); pred=NULL; //адрес предыдущего элемента списка for(;;) { if((nov= (sv*) malloc(sizeof(sv))) ==NULL) //выделение динамической памяти { printf("Empety memory!"); //не хватает памяти return; } //Ввод printf("Название книги:"); gets(nov->naz); printf("Автор:"); gets(nov->a); printf("Год выпуска:"); gets(q); nov->year=atoi(q); nov->p=pred; //адрес предыдущего элемента списка pred=nov; //запоминание адреса предыдущего элемента списка printf("Продолжить? (y/n):"); b=getc(stdin); //считывание символа if(b=='n' || b=='N') break; //выход из цикла for b=getc(stdin); //считывание символа } //Вывод clrscr(); printf("Список из DS:\n"); pred=nov; //встать в начало списка do { printf("***Книга: %-15s ***Автор: %-15s ***Год: %d\n",pred->naz,pred->a,pred->year);
pred=pred->p; } while(pred!=NULL); //пока не достигли конца списка getch(); return; //завершение программы }
Задание Б. Модернизировать программу размещения в ДП списка, таким образом, чтобы список размещался с одновременным упорядочиванием по наименованию в обратном алфавитному порядке. Организовать возможность удаления элементов списка по вводимому с клавиатуры значению поля, по которому производилось упорядочивание.
Программа решения задачи имеет вид:
#include<stdio.h> #include<stdlib.h> #include<conio.h> #include<alloc.h> #include<string.h>
void main() { char b,q[20]; // b – для считывания символа, нажатого на клавиатуре, //q – вспомогательная строка struct sv { char a[20]; int year; char naz[20]; struct sv* p; } *nov, *nac, *tec; //указатели на структуру sv, состоящую из полей a – автор, //year – год издания, naz – название книги, p – адрес предыдущего элемента списка clrscr(); if((nac= (sv*) malloc(sizeof(sv))) ==NULL) { printf("Empety memory!"); return; } //Ввод в первый элемент списка
printf("Название книги:"); gets(nac->naz); printf("Автор:"); gets(nac->a); printf("Год выпуска:"); gets(q); printf("\n"); nac->year=atoi(q); nac->p=NULL;
for(;;) {
if((nov=(sv*) malloc(sizeof(sv))) ==NULL) //выделение динамической памяти { printf("Empety memory!"); //на хватает памяти return; } //Ввод во все следующие элементы списка printf("Название книги:"); gets(nov->naz); printf("Автор:"); gets(nov->a); printf("Год выпуска:"); gets(q); nov->year=atoi(q); //определение места для вставки нового элемента списка согласно упорядочиванию if(strcmp(nac->naz,nov->naz)<0) { //вставка в начало списка nov->p=nac; nac=nov; } else { tec=nac; while(strcmp(tec->naz,nov->naz)>0 && tec->p!=NULL) tec=tec->p; //вставка в середину или конец списка nov->p=tec->p; tec->p=nov; } printf("Продолжить? (y/n):"); b=getc(stdin); //считывание символа, нажатого на клавиатуре if(b=='n' || b=='N') break; // b=getc(stdin); }
//вывод clrscr(); printf("Список из DS:\n"); tec=nac; //встать в начало списка do { printf("***Книга:%-15s ***Автор:%-15s ***Год:%-4d\n",tec->naz,tec->a,tec->year); tec=tec->p; } while(tec!=NULL); //пока не конец списка
//Удаление b=getc(stdin); for(;;) { printf("Удалить? (y/n)"); b=getc(stdin); if(b=='n' || b=='N') break; // выход из цикла b=getc(stdin); printf("Удалить книгу: "); gets(q); //чтение названия удаляемой книги tec=nac; //встать в начало списка if(strcmp(tec->naz,q)==0) //если названия совпадают { nac=nac->p; //удаление в начале списка } else { tec=nac; //встать в начало списка //поиск while(tec->p!=NULL && strcmp(tec->p->naz,q)= =0) tec=tec->p; tec->p=tec->p->p; //удаление } if(!nac) //список пуст { clrscr(); printf("Список пуст\n"); break; } //вывод
clrscr(); printf("Список из DS:\n"); tec=nac; //встать в начало do { printf("***Книга:%-15s ***Автор:%-15s ***Год:%-4d\n",tec->naz,tec->a,tec->year); tec=tec->p; } while(tec!=NULL); //пока не конец списка } getch(); return; //завершение программы }
Контрольные вопросы
|
||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2017-02-19; просмотров: 207; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.117.153.38 (0.032 с.) |