Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Динамическое распределение памяти, создание спискаСодержание книги
Поиск на нашем сайте Цель работы – овладение навыками использования динамического распределения памяти, создания списков с размещением их в динамической памяти.
Задания для самостоятельной подготовки: 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; просмотров: 278; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.214 (0.008 с.) |