Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
3_variant_po_TP.doc
Скачиваний:
3
Добавлен:
01.05.2025
Размер:
494.08 Кб
Скачать
    1. Результат работы программы

Рис.17. Результат работы программы

  1. Лабораторная работа №11

«Информационные динамические структуры»

    1. Постановка задачи

Написать программу, в которой создаются динамические структуры. Записи в линейном списке содержат ключевое поле типа int. Сформировать однонаправленный список. Удалить из него К элементов, начиная с заданного номера, добавить элемент перед элементом с заданным ключом.

Разработать следующие функции:

  1. Создание списка.

  2. Добавление элемента в список (в соответствии со своим вариантом).

  3. Удаление элемента из списка (в соответствии со своим вариантом).

  4. Печать списка.

  5. Запись списка в файл.

  6. Уничтожение списка.

  7. Восстановление списка из файла.

    1. Текст программы

#include <windows.h>

#include <time.h>

#include <iostream.h>

#include <conio.h>

#include <fstream.h>

/*

1. Написать функцию для создания списка. Функция может

создавать пустой список, а затем добавлять в него элементы.

2. Написать функцию для печати списка. Функция должна предусматривать

вывод сообщения, если список пустой.

3. Написать функции для удаления и добавления элементов списка в

соответствии со своим вариантом.

4. Выполнить изменения в списке и печать списка после каждого изменения.

5. Написать функцию для записи списка в файл.

6. Написать функцию для уничтожения списка.

7. Записать список в файл, уничтожить его и выполнить печать

(при печати должно быть выдано сообщение "Список пустой").

8. Написать функцию для восстановления списка из файла.

9. Восстановить список и распечатать его.

10. Уничтожить список.

3. Записи в линейном списке содержат ключевое поле типа int.

Сформировать однонаправленный список. Удалить из него К элементов,

начиная с заданного номера, добавить элемент перед элементом

с заданным ключом;

*/

//создаем структуру

struct list

{

int num;

list* next;

};

//создаем класс

class dlist

{

private:

list *first;

public:

dlist(int n);

void push(int num);

int print();

int del(int n,int);

void add(int k);

int put_to_file();

void read_from_file();

void del_list();

};

char* rus(const char* text);

int main(int argc, char* argv[])

{

dlist clist(5);

clist.print();

int k,m;

cout << rus("Введите номер элемента, который необходимо удалить\n");

cin >> k >> m;

clist.del(k,m);

cout << rus("Введите кk.x, которые необходимо добавить\n");

cin >> k;

clist.add(k);

clist.put_to_file();

clist.del_list();

clist.print();

clist.read_from_file();

clist.del_list();

getch();

return 0;

}

//русификация программы

char bufrus[256];

char* rus(const char* text)

{

CharToOem(text,bufrus);

return bufrus;

}

//Добавляет элемент в конец списка

void dlist::push(int num)

{

list *buf = new list;

buf->num = num;

if(first == NULL)

{

first = buf;

buf->next = NULL;

}

else

{

list *q;

q = first;

while(q->next != NULL)

q = q->next;

q->next = buf;

buf->next = NULL;

}

}

// Создает список

dlist::dlist(int n)

{

first = NULL;

srand(time(NULL));

for(int i=0; i<n; i++)

push(rand()%9);

}

//удаление элементов

int dlist::del(int k, int m)

{

list *current;

current = first;

for(int i = 1; i<k-1; i++)

{

if(current->next == NULL)

{

cout << rus("В списке меньше ") << k;

cout << rus(" элементов\n");

return -1;

}

current = current->next;

}

list *buf;

buf = current;

for(int i = 0; i<m; i++)

{

if(buf->next == NULL)

{

cout << rus("В списке меньше ") << k;

cout << rus(" элементов\n");

return -1;

}

buf = buf->next;

}

if(k==1)

first = buf->next;

else

current->next = buf->next;

print();

return 0;

}

// Добавляет элемент перед элементом с заданным ключем

void dlist::add(int k)

{

srand(time(NULL));

list *current;

current = first;

while(current->next->num != k)

{

if(current->next == NULL)

cout << "Tupaya pizda";

current = current->next;

}

list *buf = new list;

buf->num = rand()%9;

buf->next = current->next;

current->next = buf;

print();

}

//распечатка списка

int dlist::print()

{

list *current = new list;

current = first;

if(current == NULL)

{

cout << rus("\nСписок пуст!\n");

return -1;

}

int i = 1;

do

{

cout << rus("Элемент номер ") << i << " - ";

cout << current->num << endl;

current = current->next;

i++;

}while(current != NULL);

cout << endl;

return 0;

}

//Печатает список в файл

int dlist::put_to_file()

{

ofstream out("data", ios::out|ios::binary);

if(!out)

{

cout << rus("Не удаётся открыть файл!\n");

return -1;

}

list *current;

current = first;

if(current == NULL)

{

cout << rus("\nСписок пуст!\n");

return -1;

}

do

{

out.write((char *)&current,sizeof(list));

current = current->next;

}while(current != NULL);

out.close();

}

//Читает список из файла

void dlist::read_from_file()

{

cout << rus("Считываем из файла\n");

first = NULL;

ifstream in("data", ios::in|ios::binary);

while(true)

{

list *current = new list;

in.read((char *)&current,sizeof(list));

if(in.eof()) break;

push(current->num);

}

in.close();

print();

}

//Удаляет список

void dlist::del_list()

{

cout << rus("\nУдаляем список\n");

list *current = new list;

do{

current = first;

first = first->next;

current = NULL;

}while(first->next!=NULL);

first = NULL;

print();

}