Студопедия КАТЕГОРИИ: АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Отчет по лабораторной работе №11 ⇐ ПредыдущаяСтр 5 из 5
Постановка задачи Написать программу, в которой создаются динамические структуры и выполнить их обработку в соответствии со своим вариантом. Для каждого вариант разработать следующие функции: 1. Создание списка. 2. Добавление элемента в список (в соответствии со своим вариантом). 3. Удаление элемента из списка (в соответствии со своим вариантом). 4. Печать списка. 5. Запись списка в файл. 6. Уничтожение списка. 7. Восстановление списка из файла. Вариант задания
Сформировать двунаправленный список. Удалить из него первый элемент, добавить элемент в конец списка. Текст программы //---------------------------------------------------------------------------
#include <vcl.h> #pragma hdrstop #include <conio.h> #include <iostream.h> #include <windows.h> #include <iomanip.h> #include <ios.h> //---------------------------------------------------------------------------
#pragma argsused char* rus(const char* text); struct spisok { int amount; // информационная часть структуры spisok* next; // содержит адрес след элемента spisok* prew; // предыдущего }; spisok *first(int i); //1 void add(spisok **pend, int i); //1-2 void del(spisok **pbeg); //3 spisok *show(spisok *pbeg); //4 int in_to_file(FILE *f, spisok **pbeg); //5 void remove(spisok **pbeg, spisok **pend); //6 void from_file(FILE *f, spisok **pbeg, spisok **pend,int n); //7 int main(int argc, char* argv[]) { /* 1. Создание списка. 2. Добавление элемента в список (в соответствии со своим вариантом). 3. Удаление элемента из списка (в соответствии со своим вариантом). 4. Печать списка. 5. Запись списка в файл. 6. Уничтожение списка. 7. Восстановление списка из файла.
Задание: 7. Сформировать двунаправленный список. Удалить из него первый элемент, добавить элемент в конец списка.
*/
spisok *pbeg = first(1); // формирование первого элемента списка spisok *pend = pbeg; // список заканчивается едва начавшись
// добавляем нужное нам кол-во элементов в конец списка int n; cout << rus("Введите кол-во элементов в списке: "); cin >> n; n++; for (int i = 2; i < n; i++) add(&pend,i); show(pbeg); // вывод списка cout << endl;
// удаление первого элемента из списка cout << rus("Удаляем первый элемент\n"); del(&pbeg); show(pbeg); // вывод списка cout << endl;
// добавление элемента в конец списка cout << rus("Добавление элемента в конец списка\n"); add(&pend,n); show(pbeg); // вывод списка cout << endl;
// запись списка в файл cout << rus("Запись в файл\n"); FILE *f; in_to_file(f,&pbeg); cout << endl;
// удаляем список remove(&pbeg,&pend); cout << endl;
// восстановление списка из файла cout << rus("Восстанавливаем\n"); from_file(f,&pbeg,&pend,n); show(pbeg); // вывод списка
getch(); return 0; } spisok *show(spisok *pbeg) { spisok *pv = pbeg; // ставим указатель на начало while(pv) // пока pv не ноль показываем элементы { cout << pv -> amount << " "; pv = pv -> next; } cout << endl;
} spisok *first(int i) { spisok *pv = new spisok; // создаем новый элемент pv -> amount = i; // присваиваем номер этому элементу pv -> next = 0; // нет указателей никуда, т.к один элемент pv -> prew = 0; return pv; // возвращаем элемент } void add(spisok **pend, int i) { spisok *pv = new spisok; // новый элемент списка pv -> amount = i; // присваиваем номер списку pv -> next = 0; // указатель на след элемент отсутствует pv -> prew = *pend; // указатель на предыдущий элемент (*pend) -> next = pv; // с предыдущего элемента указатель на настоящий элемент *pend = pv; } void del(spisok **pbeg) {
spisok *pv = *pbeg; // ставим указатель на начало списка *pbeg = (*pbeg) -> next; // переходим к след элементу (*pbeg) -> prew = 0; // удаляем указатель на 1 первый элемент delete pv; // удаляем 1 элемент } int in_to_file(FILE *f, spisok **pbeg) { spisok *pv = *pbeg; // ставим указатель на начало списка f = fopen("f.txt","wb"); // открываем файл для записи while (pv) // запись в файл { fwrite(pv, sizeof(pv), 1 , f); pv = pv -> next; } fclose(f); // закрытие файла return 0; } void remove(spisok **pbeg, spisok **pend) {
spisok *first = *pbeg; // доп указатели spisok *last = *pend;
spisok *pv = new spisok; // создаем новый элемент do // делаем { pv = first; // элемент на начало first = first->next; // укзатаель на след элемент pv = NULL; // обнуляем элемент }while(first!=last); // пока не дойдем до конца списка
first = NULL; // обнуляем *pbeg = first; *pend = last; cout << rus("Удалили список\n"); } void from_file(FILE *f,spisok **pbeg, spisok **pend,int n) { f = fopen("f.txt", "rb"); // файл для чтения
int i=0; // счетчик n--; // уменьшаем кол-во элементов, чтоб без мусора while((i < n)&&(!feof(f))) // пока файл считываем { spisok *pv = new spisok; // создаем новый элемент fread(pv,sizeof(pv),1,f); // выгружаем в него инфу(т.е считываем)
cout << " i = " << i << " amount = " << pv->amount <<endl; // вывод
if (i == 0) // если первый элемент то { // создаем его *pbeg = first(pv->amount); *pend = *pbeg; } else add(pend,pv->amount); // иначе добавляем в конец списка i++; // счетчик }; fclose(f); // закрываем поток cout << rus("\nВосстановили\n");
}
char bufrus[256]; char* rus(const char* text) { CharToOem(text,bufrus); return bufrus; }
//--------------------------------------------------------------------------- Результат работы программы
|
||
Последнее изменение этой страницы: 2018-05-29; просмотров: 201. stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда... |