Отчет по операционным системам
Автор: MelRose • Апрель 14, 2022 • Лабораторная работа • 1,731 Слов (7 Страниц) • 195 Просмотры
Вариант 13
[pic 1]
В исходный файл я поместил буквы и цифры вперемешку. Соответственно, в одном списке будут цифры, в другом – буквы.
Выбрал односвязный список, т.к. использую предыдущее значение лишь единожды, и мне для этого нет необходимости всегда хранить предыдущее значение для каждого элемента.
Код программы (на C++):
#include <locale.h>
#include <iostream>
#include <stdio.h> #include <fstream> using namespace std;
struct SList {//структура данных
char Data; //информационное поле SList* Next; //адресное поле
SList* Prev; //адресное поле
};
//рекурентрный вывод списка void printSList(SList* Head) { if (Head != NULL) { printf("%c ", Head->Data); printSList(Head->Next);
}
else cout << "\n";
}
//вставка в список
SList* insertItemSList(SList* Head, int Number, int DataItem) { Number--;
SList* NewItem = new(SList);
NewItem->Data = DataItem; NewItem-
>Next = NULL; if (Head == NULL) {//список пуст
Head = NewItem;//создаем первый элемент списка
} else {//список не пуст SList* Current = Head; for (int i = 1; i < Number && Current->Next != NULL; i++)
Current = Current->Next; if (Number == 0) {
//вставляем новый элемент на первое место
NewItem->Next = Head;
Head = NewItem;
}
else {//вставляем новый элемент на непервое место
if (Current->Next != NULL) NewItem->Next
= Current->Next;
Current->Next = NewItem;
} } return Head;
}
//удаление из списка
SList* deleteItemSList(SList* Head, int Number) {
SList* p;//вспомогательный указатель SList* Current = Head; for (int i = 1; i < Number && Current != NULL; i++) Current = Current->Next; if (Current != NULL) {//проверка на корректность
if (Current == Head) {//удаляем первый элемент Head = Head->Next; delete(Current);
Current = Head;
} else {//удаляем непервый элемент
p = Head; while (p->Next != Current) p = p->Next; p->Next = Current->Next;
delete(Current);
Current = p; } } return Head;
}
//удаление списка void deleteSList(SList* Head) { if (Head != NULL) { deleteSList(Head->Next); delete Head;
...