Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "pch.h"
- #include <iostream>
- #include <fstream>
- using namespace std;
- struct node
- {
- int data;
- node *next;
- };
- void show(node *top)
- {
- node *p = top;
- while (p)
- {
- cout << p->data << endl;
- p = p->next;
- }
- }
- int kol_yzl(node *top)//кол-во элементов в списке
- {
- node *p;
- p = top;
- int k = 0;
- while (p)
- {
- k++;
- p = p->next;
- }
- return k;
- }
- int kol_zad_znach(node *top, int data)//кол-во элементов с определённым значением
- {
- node *p;
- p = top;
- int k = 0;
- while (p)
- {
- if (data == p->data)
- k++;
- p = p->next;
- }
- return k;
- }
- bool search_el(node *top, int x, node *p)//определяет, встречался ли элемент ранее
- {
- node *q;
- q = top;
- while (q && q != p)
- {
- if (q->data == x)
- return true;
- q = q->next;
- }
- return false;
- }
- int kol_razn(node *top)//кол-во разных элементов
- {
- int k = 0;
- node *p;
- p = top;
- while (p)
- {
- if (!search_el(top, p->data, p))
- k++;
- p = p->next;
- }
- return k;
- }
- node* dostyp_k(node *top, int n)//доступ к катому элементу
- {
- node *p;
- p = top;
- for (int k = 1; k != n; k++)
- p = p->next;
- return p;
- }
- node* dostyp_dat(node *top, int data)//доступ к элементу с датой определённый
- {
- node *p;
- p = top;
- while (p && (p->data) != data)
- p = p->next;
- return p;
- }
- void push(node*&top, int data)//вставка элементы в начало
- {
- node *p = new node;
- p->data = data;
- p->next = top;
- top = p;
- }
- void create_list(ifstream &f, node*&top)//создание списка
- {
- top = NULL;
- int data;
- while (f >> data)
- push(top, data);
- }
- node* find_address_last_member(node*top)//нахождение адреса последнего элемента
- {
- node*p = top;
- while (p->next)
- p = p->next;
- return p;
- }
- void konkat(node*top1, node*top2)//соединение списков
- {
- node*p = find_address_last_member(top1);
- p->next = top2;
- }
- int min(node *top)//минимальное значение
- {
- int min;
- min = top->data;
- node*p = top->next;
- while (p)
- {
- if (p->data < min)
- min = p->data;
- p = p->next;
- }
- return min;
- }
- int sum(node *top)//сумма всех элементов
- {
- int sum = 0;
- node*p = top;
- while (p)
- {
- sum += p->data;
- p = p->next;
- }
- return sum;
- }
- node* previo_k(node *top, int n)//нахождение адреса элемента перед k
- {
- node *pr, *q;
- q = top;
- pr = NULL;
- int k = 1;
- while (q&& k != n)
- {
- pr = q;
- q = q->next;
- k++;
- }
- return pr;
- }
- bool in_list_dat(node *top, int data)//есть ли в списке элемент с данным значением
- {
- while (top)
- {
- if (top->data == data)
- return true;
- top = top->next;
- }
- return false;
- }
- node* previo_dat(node *top, int data)//нахождение адреса элемента перед элементом с указаннымзначением
- {
- node *pr, *q;
- q = top;
- pr = NULL;
- while (q&& q->data!=data)
- {
- pr = q;
- q = q->next;
- }
- return pr;
- }
- void pop(node *&top)//удаление первого элемента
- {
- node *p;
- if (top)
- {
- p = top->next;
- delete top;
- top = p;
- }
- }
- void del_k(node*&top, int n)//удаление к-того элемента
- {
- node *r, *p;
- p = dostyp_k(top, n);
- if (n == 1)
- pop(top);
- else
- {
- r = previo_k(top, n);
- r->next = p->next;
- delete p;
- }
- }
- void del_data(node*&top, int data)//удаление элемента с определённым значением
- {
- node *r, *p;
- p = dostyp_dat(top, data);
- if (data == top->data)
- pop(top);
- else
- {
- r = previo_dat(top, data);
- r->next = p->next;
- delete p;
- }
- }
- void del_yz(node *top, node *p)//удаление узла
- {
- node *q;
- q = p->next;
- if (top == p)
- pop(top);
- else
- {
- p->data = q->data;
- p->next = q->next;
- delete q;
- }
- }
- void after_pos(node *top, int data)//вставка после последнего
- {
- node *p = find_address_last_member(top);
- node *q;
- q = new node;
- q->data = data;
- q->next = NULL;
- p->next = q;
- }
- void insert(node *p, int data)//вставка в начало
- {
- node *q;
- q = new node;
- q->data = data;
- q->next = p->next;
- p->next = q;
- }
- void seporate_k(node*top, node*&top1, node*&top2, int n)//разбиение на 2 списка(перые к элементов к первому, остальные ко второму)
- {
- int k = 1;
- top1 = NULL;
- top2 = NULL;
- node*p = top;
- while (p && k != n)
- {
- push(top1, p->data);
- k++;
- p = p->next;
- }
- while (p)
- {
- push(top2, p->data);
- p = p->next;
- }
- }
- void seporate(node*top, node*&top1, node*&top2)//разделение на 2 списка(на чётных местах первый, остальные второй)
- {
- int k = 1;
- top1 = NULL;
- top2 = NULL;
- node *p = top;
- while (p)
- {
- if (k % 2 == 0)
- push(top2, p->data);
- else
- push(top1, p->data);
- k++;
- p = p->next;
- }
- }
- node* revers(node* top)//переворот списка
- {
- node* top1 = NULL;
- while (top)
- {
- push(top1, top->data);
- top = top->next;
- }
- return top1;
- }
- bool list_in(node *top, node*p)//есть ли один список в другом
- {
- node *q, *r, *s;
- q = top;
- r = p;
- int k = 1;
- int n = kol_yzl(p);
- while (q)
- {
- if (q->data == r->data)
- {
- if (k == 1)
- s = q;
- k++;
- if (k == n - 1)
- return true;
- }
- else
- {
- if (k > 1)
- q = s;
- k = 1;
- r = p;
- }
- q = q->next;
- r = r->next;
- }
- return false;
- }
- void sort(node* top)//сорторовка
- {
- int data;
- node* p, *q;
- p = top;
- while (p->next)
- {
- q = p->next;
- while (q)
- {
- if (p->data > q->data)
- {
- data = p->data;
- p->data = q->data;
- q->data = data;
- }
- q = q->next;
- }
- p = p->next;
- }
- }
- node* union_list(node*top1, node*top2)//объединение
- {
- node *top3 = revers(top1);
- while (top2)
- {
- if (!in_list_dat(top3, top2->data))
- push(top3, top2->data);
- top2 = top2->next;
- }
- return top3;
- }
- node* insert_list(node*top1, node*top2)//пересечение
- {
- node*top3 = NULL;
- while (top2)
- {
- if (in_list_dat(top1, top2->data))
- push(top3, top2->data);
- top2 = top2->next;
- }
- return top3;
- }
- node* razn(node*top1, node*top2)//разность
- {
- node * top3 = NULL;
- while (top1)
- {
- if (!in_list_dat(top2, top1->data))
- push(top3, top1->data);
- top1 = top1->next;
- }
- return top3;
- }
- int main()
- {
- ifstream in("test.txt");
- ifstream in1("test1.txt");
- node *top, *p;
- create_list(in, top);
- create_list(in1, top);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement