Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #include <iostream>
- #include <fstream>
- using namespace std;
- struct node
- {
- int info;
- node * next;
- };
- void setNull(node * & p)
- {
- p = NULL;
- }
- void createElem(node * & p, int y)
- {
- p = new node;
- p->info = y;
- p->next = NULL;
- }
- void addFirst(node * & head1, node * p)//добавление в начало
- {
- p->next = head1;
- head1 = p;
- }
- void createListFromFile(node * & head1, ifstream & f)
- {
- node * q;
- int x;
- setNull(head1);
- while (f >> x)
- {
- createElem(q, x);
- addFirst(head1, q);
- }
- }
- void setHead(node * head1, node * & p)
- {
- p = head1;
- }
- bool nodeIsNull(node * p)
- {
- return p == NULL;
- }
- void showNode(node * p)
- {
- cout << p->info << ' ';
- }
- void moove(node * & p)
- {
- p = p->next;
- }
- void showList(node * head)
- {
- node * q;
- setHead(head, q);
- while (!nodeIsNull(q))
- {
- showNode(q);
- moove(q);
- }
- cout << endl;
- }
- bool listIsEmpty(node * head1)
- {
- return head1 == NULL;
- }
- bool compInfo(node * p1, node * p2)
- {
- return p1->info == p2->info;
- }
- bool taskA(node * head1, node * head2)
- {
- node * q1, *q2;
- setHead(head1, q1);
- setHead(head2, q2);
- bool t = true;
- while (!nodeIsNull(q1) && !nodeIsNull(q2) && t)
- {
- if (!compInfo(q1, q2))
- t = false;
- moove(q1);
- moove(q2);
- }
- return t && nodeIsNull(q1) && nodeIsNull(q2);
- }
- bool taskB(node * head)
- {
- node * q,*p;
- setHead(head, q);
- bool t = false;
- if (!listIsEmpty(head))
- if (!listIsEmpty(head->next))//один элемент
- while (!listIsEmpty(q->next) && !t)
- {
- p = q->next;
- while (!listIsEmpty(p) && !t)
- {
- if (q->info == p->info)
- t = true;
- moove(p);
- }
- moove(q);
- }
- return t;
- }
- void First_in_End(node * &head)
- {
- node * q, *p;
- setHead(head, q);
- if (!listIsEmpty(q->next))
- {
- moove(head);
- setHead(head, p);
- while (!listIsEmpty(p->next))//походим до последнего
- moove(p);
- p->next = q;
- setNull(q->next);
- }
- }
- void Last_in_begin(node * &head)
- {
- node * q, *p;
- setHead(head, q);
- setHead(head, p);
- if (!listIsEmpty(q->next))
- {
- while (!listIsEmpty(q->next->next))//походим до предпоследнего
- moove(q);
- /*p = q->next;//
- setNull(q->next);
- p->next = head;
- head = p;*/
- head = q->next;
- head->next = p;
- setNull(q->next);
- }
- }
- bool vhodit_splosh_neuporyad(node * head1, node *head2)
- {
- node * q1, *q2, *temp = new node;
- setHead(head1, q1);
- setHead(head2, q2);
- bool t, f = false;
- while (!nodeIsNull(q1->next) && !f)
- {
- temp = q1;
- t = true;
- while (!nodeIsNull(q1) && !nodeIsNull(q2) && t)
- {
- if (!compInfo(q1, q2))
- t = false;
- else
- {
- move(q1);
- move(q2);
- }
- }
- if (t&& nodeIsNull(q2))
- f = true;
- else {
- q1 = temp;
- move(q1);
- setHead(head2, q2);
- }
- }
- return f;
- }
- bool taskb2(node * &head1, node * &head2)
- {
- bool f = true, t;
- node * q1, *q2;
- setHead(head1, q1);
- setHead(head2, q2);
- while (!nodeIsNull(q2) &&f)
- {
- t = false;
- while (!nodeIsNull(q1) && !nodeIsNull(q2) && !t)//цикл для одного элмента
- {
- if (!compInfo(q1, q2))
- {
- moove(q1);
- }
- else
- {
- t = true;
- moove(q1);
- moove(q2);
- }
- }
- if (!t&&nodeIsNull(q1))
- f = false;
- }
- return f;
- }
- node* copy(node * head1)//но наоборот записывает
- {
- node* head2, *p, *q1;
- setHead(head1, q1);
- setNull(head2);
- setHead(head2, p);
- while (!nodeIsNull(q1))
- {
- createElem(p, q1->info);
- addFirst(head2, p);
- moove(q1);
- }
- return head2;
- }
- void Del(node * &q, node * &temp)
- {
- temp->next = q->next;
- }
- bool taskb3(node * &head1, node * head2)
- {
- bool f = true, t;
- node * q1, *q2,*q3, *temp;
- setHead(head1, q1);
- setHead(head2, q2);
- while (!nodeIsNull(q1) && f)
- {
- setHead(head2, q3);
- t = false;
- while (!nodeIsNull(q3) && !nodeIsNull(q1) && !t)//цикл для одного элмента
- {
- if (!compInfo(q3, q1))
- {
- temp = q3;
- moove(q3);
- }
- else
- {
- if(q3!=head2&!nodeIsNull(q3))
- Del(q3, temp);
- else
- {
- if (q3 == head2)
- head2 = q3->next;
- }
- t = true;
- moove(q1);
- }
- }
- if (!t&&nodeIsNull(q3))
- f = false;
- }
- return f;
- }
- void E(node * &head1, node * &head2)
- {
- if (nodeIsNull(head1))
- head1 = head2;
- else
- {
- node * q1, *q2;
- setHead(head1, q1);
- setHead(head2, q2);
- while (!nodeIsNull(q1->next))
- moove(q1);
- q1->next = head2;
- }
- }
- void Zh(node * &head1, node * &head2, int x)
- {
- if (!nodeIsNull(head1))
- {
- node * q1, *q2,*p;
- setHead(head1, q1);
- setHead(head2, q2);
- while (!nodeIsNull(q1)&&q1->info!=x)
- moove(q1);
- if (!nodeIsNull(q1))
- {
- while (!nodeIsNull(q2->next))
- moove(q2);
- p = q1->next;
- q1->next = head2;
- q2->next = p;
- }
- }
- }
- void Z(node * &head1)
- {
- node *q1, *q2,*q3,*temp=NULL;
- setHead(head1, q1);
- if (!nodeIsNull(head1))
- if (!nodeIsNull(head1->next))//один элемент
- {
- q2 = q1->next;
- q3 = q2->next;
- while (!nodeIsNull(q3))
- {
- q1->next = temp;
- q2->next = q1;
- temp = q1;
- q1 = q2;
- q2 = q3;
- moove(q3);
- }
- q1->next = temp;
- q2->next = q1;
- head1= q2;
- }
- }
- void I(node* head1)
- {
- node * q1, *q2;
- setHead(head1, q1);
- if(!nodeIsNull(head1))
- if (!nodeIsNull(head1->next))
- {
- while (!nodeIsNull(q1->next))
- {
- if (compInfo(q1, q1->next))
- Del(q1->next, q1);
- else
- moove(q1);
- }
- }
- }
- void K(node* head1)
- {
- node * q1, *q2, *temp;
- setHead(head1, q1);
- if (!nodeIsNull(head1))
- if (!nodeIsNull(head1->next))
- {
- while (!nodeIsNull(q1->next->next))///
- {
- q2 = q1->next;
- temp = q1;
- while (!nodeIsNull(q2->next))///
- {
- if (compInfo(q1, q2))
- {
- Del(q2, temp);
- q2 = temp->next;
- }
- else
- {
- temp = q2;
- moove(q2);
- }
- }
- if (compInfo(q1, q2))
- temp->next = NULL;
- moove(q1);
- if (q1->next == NULL)
- break;
- }
- }
- }
- int main()
- {
- ifstream f("Text.txt");
- node * head1;
- createListFromFile(head1, f);
- showList(head1);
- ifstream g("Text1.txt");
- node * head2;
- createListFromFile(head2, g);
- showList(head2);
- /*if (!listIsEmpty(head1) && !listIsEmpty(head2))
- cout << taskA(head1, head2) << endl;
- else cout << "list Is Empty" << endl;*/
- /*if (!listIsEmpty(head1))
- cout << taskB(head1) << endl;
- else cout << "list Is Empty" << endl;*/
- /*First_in_End(head1);
- showList(head1);*/
- /*Last_in_begin(head1);
- showList(head1);*/
- //cout << taskb2(head1, head2) << endl;
- /*E(head1, head2);
- showList(head1);*/
- /*Zh(head1, head2, 8);
- showList(head1);*/
- cout << taskb3(head1, head2) << endl;
- /*I(head1);
- showList(head1);*/
- //K(head1);
- //Z(head1);
- //showList(head1);
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment