Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Zvit_Kursak_2_list-6.docx
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
217 Кб
Скачать
☆

Додаток в Завдання 4

файл element.h

#include<iostream>

usingnamespace std;

class element //кожен вузол списку - це обєкт класу element

{

public:

int data; //інформаційне поле (містить значення елемента)

element *down; //вказівник на наступний вузол наступного рядка

element *next; //вказівник на наступний вузол (у тому ж рядку)

};

файл list.h

#include"element.h"

#include<iomanip>

class list

{

public:

list(int _m, int _n); //конструктор

virtual~list(); //деструктор

void push(int item); //додає новий елемент

void Show(); //виводить список на екран

void del_elem(int pos_m, int pos_n); //видаляє елемент із заданою позицією

void dodaty(list *result, list *A, list *B); //додає два списки(матриці)

element get_head(); //повертає голову

private:

int m, n; //для розмірності матриці

int k; //для номеру записаного елемента у певному рядку

element *head; //голова списку

};

файл list.cpp

#include "list.h"\

/*Конструктор, створює розмірність майбутньої матриці*/

list::list(int _m, int _n){

m = _m; //задається розмірність

n = _n; //матриці

k = 0; //поки що немає жодного елемента

head = 0;

}

/*Деструктор*/

list::~list(){

element *temp_right;

element *temp;

while(head){ //для просування по рядках

temp_right = head;

head = head->down;

while(temp_right){ //для просування по стовбцях поточного рядка

temp = temp_right; //для видалення усіх елементів із поточного рядка

temp_right = temp_right->next;

delete temp;

}

}

}

/*Додавання у відповідне за порядком місце*/

void list::push(int item){

element *temp = head;

if(!temp){ //якщо список пустий(матриця пуста)

head = new element; //виділення памяті під новий елемент

temp = head;

}

else{ //якщо голова вже заповнена(перший елемент матриці)

while(temp->down) //шукаємо поточний рядок

temp = temp->down;

if(k < n){ //якщо у рядку ще не всі елементи заповнені

while(temp->next) //пошук поточного елемента

temp = temp->next;

temp->next = new element; //виділення памяті під новий елемент

temp = temp->next;

}

else{ //якщо почався новий рядок

k = 0; //поточний номер елемента у новому рядку=0

temp->down = new element; //виділення памяті під новий елемент

temp = temp->down;

}

}

temp->data = item; //занесення даних

temp->down = 0;

temp->next = 0;

k++; //поточний стовбець збільшується

}

/*Видаляння елемента за розташуванням у матриці*/

void list::del_elem(int pos_m, int pos_n){

element *temp = head;

int i=0;

while(i != pos_m){

temp = temp->down;

i++;

}

i = 0;

while(i != pos_n-1){

temp = temp->next;

i++;

}

element *temp_del = temp->next;

temp->next = temp->next->next;

delete temp_del;

}

/*Виводить на екран вміст матриці*/

void list::Show(){

element *temp_head = head;

element *temp;

cout << "Matrix :\n";

while(temp_head){ //проходження по рядках

temp = temp_head;

while(temp){ //проходження по стовпцях

printf("%3d",temp->data);

temp = temp->next;

}

temp_head = temp_head->down;

cout << "\n";

}

}

/*Повертає голову списку (початок матриці)*/

element list::get_head(){

return *head;

}

//повертає матрицю на 90 градусів за год стрілкою

void list::perevorot_90_degree(){

/*оголошення змінних*/

element *temp_down = head->down;

element *temp = head;

element *temp_up = head;

element *temp_center = head;

/*Робить перший реальний рядок останнім транспонованим*/

while(temp){

temp->down = temp->next;//тепер елмент переглядатимуться вниз а не вбік з 1 рядка

temp->next = 0; //це будуть останні елементи із

temp = temp->down; //транспонованих рядків

}

head->next = 0;

/*Робить кожен рядок стовпцем, побудова стовбців*/

while(temp_down){

temp = temp_down;

temp_center = temp_down;

temp_down = temp->down;

while(temp){

temp->down = temp->next;

temp->next = 0;

temp = temp->down;

}

temp_center->next = temp_up;

temp_up = temp_center;

}

head = temp_center;

temp_down = head;

temp_up = temp_down->next;

/*Повязує елементи із транспонованих стовбців у рядки*/

while(temp_up){

temp = temp_up;

while(temp){

temp_down->next = temp;

temp_down = temp_down->down;

temp = temp->down;

}

temp_down = temp_up;

temp_up = temp_up->next;

}

}

//транспонує матрицю

void list::transpon(){

element *temp;

element *prew;

element *next_r = head;

element *next_r_down;

while(next_r){

temp = next_r;

next_r_down = next_r->down;

while(temp){

temp->down = temp->next;

prew = temp;

temp = temp->next;

prew->next = 0;

}

next_r->next = next_r_down;

next_r = next_r->next;

}

element *elem = head;

element *temp_next;

while(elem->next){

temp = elem;

temp_next = temp->next;

while(temp){

temp->next = temp_next;

temp = temp->down;

temp_next = temp_next->down;

}

elem = elem->next;

}

}

файл main.cpp

#include"list.h"

int main(void)

{

int m; //кількість рядків

int n; //кількість стовпців

int k;

cout <<"Vvedit kilkist matryts: ";

cin >> k;

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

cout <<"Vvedit rozmirnist matrytsi mxn:\n";

cout <<"m = ";

cin >> m;

cout <<"n = ";

cin >> n;

int temp;

list *A = new list(m, n);

cout <<"\nVvedid matrytsu A:\n";

for(int i=0; i<m; i++){ //введення матриці

for(int j=0; j<n; j++){

cin >> temp;

A->push(temp);

}

}

A->Show();

A->transpon();

cout <<"Transponovana matrytsa:\n";

A->Show();

}

return 0;

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]