Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- using namespace std;
- struct elem
- {
- int key;
- elem *prev;
- elem *next;
- } *start;
- void init();
- void add_b(int n);
- void add_mid1(int n, int k);
- void add_mid2(int n, int k);
- void add_e(int n);
- int del_b(int &n);
- int del_n(int n);
- int del_e(int &n);
- void invert();
- void list();
- void printBack();
- int search(int k);
- int searchAt(int k);
- int main()
- {
- int num, k, ch;
- init();
- do {
- cout << "\n Menu \n";
- cout << "1. Add the first element\n";
- cout << "2. Add element before k\n";
- cout << "3. Add element after k\n";
- cout << "4. Add the last element\n";
- cout << "5. Del the first element\n";
- cout << "6. Del the element with value num\n";
- cout << "7. Del the last element\n";
- cout << "8. Invert element\n";
- cout << "9. Show the list\n";
- cout << "10. Print backwards\n";
- cout << "11. Count elements matching k\n";
- cout << "12. Print position of first k\n";
- cout << "0. Exit\n";
- cout << "Your choice:";
- cin >> ch;
- switch (ch)
- {
- case 1:
- cout << "num=";
- cin >> num;
- add_b(num);
- break;
- case 2:
- cout << "num=";
- cin >> num;
- cout << "k=";
- cin >> k;
- add_mid1(num, k);
- break;
- case 3:
- cout << "num=";
- cin >> num;
- cout << "k=";
- cin >> k;
- add_mid2(num, k);
- break;
- case 4:
- cout << "num=";
- cin >> num;
- add_e(num);
- break;
- case 5:
- if(del_b(num))
- list();
- break;
- case 6:
- cout << "num=";
- cin >> num;
- if (del_n(num))
- list();
- break;
- case 7:
- if (del_e(num))
- list();
- break;
- case 8:
- invert();
- list();
- break;
- case 9:
- list();
- break;
- case 10:
- printBack();
- break;
- case 11:
- {
- int c = 0;
- cout << "Enter key ";
- cin >> c;
- cout << "Count elements matching " << c << " " << search(c);
- break;
- }
- case 12:
- {
- int c = 0;
- cout << "Enter key ";
- cin >> c;
- cout << "Key " << c << " at pos " << searchAt(c);
- break;
- }
- }
- } while (ch != 0);
- system("pause");
- return 0;
- }
- void init()
- {
- start = NULL;
- }
- void add_b(int n)
- {
- elem *p = start;
- start = new elem;
- start->key = n;
- start->next = p;
- start->prev = NULL;
- if (p)
- p->prev = start;
- }
- void add_mid1(int n, int k)
- {
- elem *q=NULL, *p = start;
- while (p->key != k)
- p = p->next;
- q = new elem;
- q->next = p->next;
- q->key = p->key;
- q->prev = p;
- if(p)
- p->next = q;
- p->key = n;
- q->next->prev = q;
- }
- void add_mid2(int n, int k)
- {
- elem *q;
- elem *p = start;
- while (p->key != k)
- p = p->next;
- q = new elem;
- q->key = n;
- q->next = p->next;
- p->next = q;
- q->prev = p;
- q->next->prev=q;
- }
- void add_e(int n)
- {
- elem *p = start, *q;
- q = new elem;
- q->key = n;
- q->next = NULL;
- if (start)
- {
- while (p->next)
- p = p->next;
- p->next = q;
- }
- else
- start = q;
- q->prev = p;
- }
- int del_b(int &n)
- {
- elem *p = start;
- if (start)
- {
- n = start->key;
- if (start->next)
- {
- start = start->next;
- start->prev = NULL;
- }
- else
- start = NULL;
- delete p;
- return 1;
- }
- else
- return 0;
- }
- int del_n(int n)
- {
- elem *q=NULL, *p = start;
- if (start)
- {
- while ((p->key != n) && (p->next != NULL))
- p = p->next;
- if (p->key == n)
- {
- if (p->prev)
- {
- p->prev->next = p->next;
- if (p->next)
- p->next->prev = p->prev;
- }
- else
- {
- if (p->next)
- {
- p->next->prev = NULL;
- start = p->next;
- }
- else
- start = NULL;
- }
- delete p;
- return 1;
- }
- else
- return 0;
- }
- else
- return 0;
- }
- int del_e(int &n)
- {
- elem *p = start;
- if (start)
- {
- while (p->next)
- p = p->next;
- n = p->key;
- if (p->prev)
- p->prev->next = NULL;
- else
- start = NULL;
- delete p;
- return 1;
- }
- else
- return 0;
- }
- void invert()
- {
- elem *p = start, *q = NULL;
- while (p)
- {
- q = p->next;
- p->next = p->prev;
- p->prev = q;
- if (q == NULL)
- start = p;
- p = q;
- }
- }
- void list()
- {
- elem *p = start;
- if (start)
- while (p)
- { cout << p->key << "\t";
- p = p->next;
- }
- cout << "\n\n";
- }
- void printBack()
- {
- elem *p = start;
- elem *b = NULL;
- cout << "Print back\n";
- while (p->next)
- {
- p = p->next;
- }
- b = p;
- while (b)
- {
- cout << b->key << endl;
- b = b->prev;
- }
- }
- int search(int k)
- {
- int count = 0;
- elem *p = start;
- while (p) {
- if (p->key == k)
- count++;
- p = p->next;
- }
- return count;
- }
- int searchAt(int k)
- {
- int count = 0;
- elem *p = start;
- bool found = true;
- while (p)
- {
- if (p->key == k)
- {
- found = true;
- break;
- }
- p = p->next;
- count++;
- }
- if (found)
- return count;
- else return -1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement