Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Смирнова_2370_ЛР2

.docx
Скачиваний:
0
Добавлен:
05.12.2024
Размер:
20.05 Кб
Скачать

Дисциплина: «Программирование»

Отчет по лабораторной работе №2

Выполнила: Смирнова М. В.

Группа: №2370

Цели работы:

  1. Построение линейного односвязного линейного списка типа «очередь». (информационные части узлов должны иметь целочисленный тип и заполняться путем последовательного ввода значений с клавиатуры; признак окончания ввода – введенный 0);

  2. Обработку созданного списка с выполнением следующих функций:

    1. Вставку узлов с информационной частью = 1 во все позиции списка, предшествующие узлам с отрицательной информационной частью

    2. Удаление всех узлов списка, содержащих в информационной части отрицательные числа;

    3. Расчет количества вхождений заданного с клавиатуры числа в информационные поля узлов;

    4. Рекурсивное удаление всех узлов списка

Код программы:

#include<iostream>

using namespace std;

struct Node{

int data;

Node* next;

Node(int number){

data = number;

next = nullptr;}};

struct queue{

Node* first;

Node* last;

queue(){

first = nullptr;

last = nullptr;}

bool is_empty() {

if (first == nullptr)

return true;

else

return false;}

void push(int number){

Node* ptr = new Node(number);

if (is_empty()){

first = ptr;

last = ptr;

return;}

last->next = ptr;

last = ptr;}

void show(){

if (is_empty()) return;

Node* c = first;

cout << c->data << endl;

c = c->next;}

int front(){

Node* a = first;

return a->data;}

void pop(){

if (is_empty()) return;

if (first == last) {

Node* fptr = first;

first = fptr->next;

delete fptr;

return;}

else{

Node* lptr = first->next;

delete first;

first = lptr;}}};

void deleteList(queue& list1){

if (list1.is_empty())

return;

else{

list1.pop();}

deleteList(list1);}

int main(){

setlocale(LC_ALL, "Russian");

int NumOfList1 = 0;

int NumOfList2 = 0;

int current = 0;

queue list1;

queue list2;

int num = 0;

cout << "Введите элементы очереди" << endl;

cin >> num;

while (num != 0) {

list1.push(num);

cin >> num;

NumOfList1++;}

//пункт A

for (int i = 0; i < NumOfList1; i++){

current = list1.front();

if (current < 0) {

list2.push(1);

NumOfList2++;

}

list2.push(current);

list1.pop();

NumOfList2++;}

cout << "Вывод элементов после добавления 1" << endl;

for (int i = 0; i < NumOfList2; i++){

cout << list2.front() << endl;

list1.push(list2.front());

list2.pop();}

int chetchik = NumOfList2;

NumOfList2 = 0;

//пункт B

cout << "Положительные элементы очереди" << endl;

for (int i = 0; i < chetchik; i++){

if (list1.front() >= 0) {

cout << list1.front() << endl;

list2.push(list1.front());

NumOfList2++;}

list1.pop();}

//пункт C

cout << "Расчитаем количество вхождений заданного числа. Введите число" << endl;

int element = 0;

int occ = 0;

cin >> element;

for (int i = 0; i < NumOfList2; i++) {

if (element == list2.front()) {

occ++;}

list1.push(list2.front());

list2.pop();}

cout << "Число вхождений " << occ << endl;

//пункт D

deleteList(list1);}