Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <pthread.h>
- #include <string>
- using namespace std;
- struct element {
- int info;
- element* next;
- element* prev;
- };
- struct dynamic_list {
- element* head;
- element* tail;
- };
- void addElement(dynamic_list& list, int part);
- void deleteElement(dynamic_list& list, int number, short mode);
- bool checkEmpty(dynamic_list list);
- void showList(dynamic_list list);
- void findElement(dynamic_list& list, int elem);
- int main()
- {
- int part;
- int number;
- int elem;
- dynamic_list list;
- list.head = NULL;
- list.tail = list.head;
- for (int i =0; i < 10; i++)
- {
- cin >> part;
- addElement(list, part);
- }
- showList(list);
- int choice;
- cout << "choice";
- cin >> choice;
- while (choice != 5) {
- switch (choice) {
- case 1: //Âñòàâêà ýëåìåíòà
- cout << "Ââåäèòå ÷èñëî:\n";
- cin >> part;
- //cout << "\nÊóäà ñëåäóåò âñòàâèòü íîâûé ýëåìåíò? (1 - âî ãëàâó ñïèñêà, 2 - â õâîñò ñïèñêà, 3 - ïåðåä óêàçàííûì, 4 - çà óêàçàííûì)\n";
- //cin >> mode;
- //if (mode == 3 || mode == 4) {
- // cout << "Óêàæèòå íîìåð ýëåìåíòà:\n";
- // cin >> number;
- //}
- addElement(list, part);
- //cout << MENU;
- cin >> choice;
- break;
- case 2: //Óäàëåíèå ýëåìåíòà
- cout << "Êàêîé ýëåìåíò ñëåäóåò óäàëèòü? (1 - ñ ãîëîâû, 2 - ñ õâîñòà, 3 - óêàçàííûé)\n";
- short mode;
- cin >> mode;
- if (mode == 3) {
- cout << "Óêàæèòå íîìåð ýëåìåíòà:\n";
- cin >> number;
- }
- deleteElement(list, number, mode);
- //cout << MENU;
- cin >> choice;
- break;
- case 3: //Ïîêàçàòü ñïèñîê
- showList(list);
- //cout << MENU;
- cin >> choice;
- break;
- case 4:
- cin >> elem;
- findElement(list, elem);
- cin >> choice;
- break;
- case 5: //Âûõîä
- break;
- default:
- cout << "\aÒðåáóåòñÿ ââåñòè ÷èñëî îò 1 äî 4.\n";
- //cout << MENU;
- cin >> choice;
- break;
- }
- }
- return 0;
- }
- void addElement(dynamic_list& list, int part)
- {
- element* newElement = new element;
- element* current;
- newElement->info = part;
- newElement->next = NULL;
- newElement->prev = NULL;
- if (checkEmpty(list)) {
- list.head = newElement;
- list.tail = newElement;
- }
- list.tail->next = newElement;
- newElement->prev = list.tail;
- list.tail = newElement;
- list.tail->next = NULL;
- }
- void deleteElement(dynamic_list& list, int number, short mode)
- {
- switch (mode) {
- case 1: //Óäàëåíèå ýëåìåíòà ñ ãîëîâû
- if (list.tail == list.head) {
- list.head = NULL;
- list.tail = NULL;
- cout << "Óäàëåíèå ýëåìåíòà ïðîøëî óñïåøíî.\n";
- break;
- }
- list.head = list.head->next;
- list.head->prev = NULL;
- cout << "Óäàëåíèå ýëåìåíòà ïðîøëî óñïåøíî.\n";
- break;
- case 2: //Óäàëåíèå ýëåìåíòà ñ õâîñòà
- if (list.tail == list.head) {
- list.head = NULL;
- list.tail = NULL;
- cout << "Óäàëåíèå ýëåìåíòà ïðîøëî óñïåøíî.\n";
- break;
- }
- list.tail = list.tail->prev;
- list.tail->next = NULL;
- cout << "Óäàëåíèå ýëåìåíòà ïðîøëî óñïåøíî.\n";
- break;
- case 3: //Óäàëåíèå óêàçàííîãî ýëåìåíòà
- element* current;
- current = list.head;
- if (number == 1) {
- deleteElement(list, 1, 1);
- break;
- }
- int i = 1;
- for (; i < number && current != NULL; i++)
- current = current->next;
- if (current == list.tail) {
- deleteElement(list, i, 2);
- break;
- }
- if (current != NULL) {
- current->prev->next = current->next;
- current->next->prev = current->prev;
- delete current;
- cout << "\nÓäàëåíèå ýëåìåíòà ïðîøëî óñïåøíî.\n";
- break;
- }
- else {
- cout << "\nÝëåìåíò ñ òàêèì íîìåðîì íå ñóùåñòâóåò.\n";
- return;
- }
- }
- }
- bool checkEmpty(dynamic_list list)
- {
- return (list.head == NULL || list.tail == NULL) ? true : false;
- }
- void showList(dynamic_list list)
- {
- cout << "Òåêóùèé ñïèñîê:\n";
- while (list.head != NULL) {
- cout << list.head->info << ' ';
- list.head = list.head->next;
- }
- cout << '\n';
- }
- void findElement(dynamic_list& list, int elem)
- {
- element * k = new element;
- while (list.head != NULL) {
- k->info = list.head->info;
- if (k->info == elem){
- cout << elem;
- break;
- }
- else
- list.head = list.head->next;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement