
Смирнова_2370_ЛР2
.docxДисциплина: «Программирование»
Отчет по лабораторной работе №2
Выполнила: Смирнова М. В.
Группа: №2370
Цели работы:
Построение линейного односвязного линейного списка типа «очередь». (информационные части узлов должны иметь целочисленный тип и заполняться путем последовательного ввода значений с клавиатуры; признак окончания ввода – введенный 0);
Обработку созданного списка с выполнением следующих функций:
Вставку узлов с информационной частью = 1 во все позиции списка, предшествующие узлам с отрицательной информационной частью
Удаление всех узлов списка, содержащих в информационной части отрицательные числа;
Расчет количества вхождений заданного с клавиатуры числа в информационные поля узлов;
Рекурсивное удаление всех узлов списка
Код программы:
#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);}