Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<cstdio>
- #include<cstdlib>
- #include <vector>
- using namespace std;
- struct node
- {
- int info;
- struct node *next;
- struct node *prev;
- }*start,*last;
- /*
- Class Declaration
- */
- class double_llist
- {
- public:
- void create_list(int value);
- void add_after(int value, int position);
- void delete_element_first(int value);
- void delete_element_last();
- int search_element(int value);
- void display_dlist();
- double_llist()
- {
- start = NULL;
- last= NULL;
- }
- };
- /*
- * Main: Conatins Menu
- */
- int main()
- {
- struct node *q = start;
- int choice, element, position;
- double_llist dl;
- while (1)
- {
- //خيارات ستفيد منها المستخدم لمعرفة ايلامور التي يجب ان يفعلها
- cout<<endl<<"----------------------------"<<endl;
- cout<<endl<<"Operations on Doubly linked list"<<endl;
- cout<<endl<<"----------------------------"<<endl;
- cout<<"1.Create Node"<<endl;
- cout<<"2.Add after position"<<endl;
- cout<<"3.Delete first "<<endl;
- cout<<"4.Delete last "<<endl;
- cout<<"5.search element"<<endl;
- cout<<"6.Display"<<endl;
- cout<<"7.Quit"<<endl;
- cout<<"Enter your choice : ";
- cin>>choice;
- switch ( choice )
- {
- case 1:
- cout<<"Enter the element: ";
- cin>>element;
- dl.create_list(element);
- cout<<endl;
- break;
- case 2:
- cout<<"Enter the element: ";
- cin>>element;
- cout<<"Insert Element after postion: ";
- cin>>position;
- dl.add_after(element, position);
- cout<<endl;
- break;
- case 3:
- if (start == NULL)
- {
- cout<<"List empty,nothing to delete"<<endl;
- break;
- }
- dl.delete_element_first(start->info);
- cout<<endl;
- break;
- case 4 :
- if (start == NULL)
- {
- cout<<"List empty,nothing to delete"<<endl;
- break;
- }
- dl.delete_element_last();
- cout<<endl;
- break;
- case 5:
- int value;
- cout<<"Enter the value please";
- cin>>value;
- cout<<dl.search_element(value)<<endl;;
- break;
- case 6:
- dl.display_dlist();
- cout<<endl;
- break;
- case 7:
- exit(1);
- default:
- cout<<"Wrong choice"<<endl;
- }
- }
- return 0;
- }
- /*
- * Create Double Link List
- */
- void double_llist::create_list(int value)// تابع لإنشاء السجل
- {
- struct node *s, *temp;
- temp = new(struct node);
- temp->info = value;
- temp->next = NULL;
- if (start == NULL)
- {
- temp->prev = NULL;
- start = temp;
- }
- else
- {
- s = start;
- while (s->next != NULL)
- s = s->next;
- s->next = temp;
- temp->prev = s;
- }
- }
- void double_llist::add_after(int value, int pos)// تابع نقوم من خلاله بإضافة قيمة إلى موقع محدد نقوم من خلاله بعمليه تأخير للعناصر التي تسبق الموقع وتقديم للعناصر التي تليه
- {
- if (start == NULL)
- {
- cout<<"First Create the list."<<endl;
- return;
- }
- struct node *tmp, *q;
- int i;
- q = start;
- for (i = 0;i < pos - 1;i++)
- {
- q = q->next;
- if (q == NULL)
- {
- cout<<"There are less than ";
- cout<<pos<<" elements."<<endl;
- return;
- }
- }
- tmp = new(struct node);
- tmp->info = value;
- if (q->next == NULL)
- {
- q->next = tmp;
- tmp->next = NULL;
- tmp->prev = q;
- }
- else
- {
- tmp->next = q->next;
- tmp->next->prev = tmp;
- q->next = tmp;
- tmp->prev = q;
- }
- cout<<"Element Inserted"<<endl;
- }
- /*
- * Deletion of element from the list
- */
- void double_llist::delete_element_first(int value)// تابع حذف العقدة الاولى
- {
- struct node *tmp, *q;
- /*first element deletion*/
- if (start->info == value)
- {
- tmp = start;
- start = start->next;
- start->prev = NULL;
- cout<<"Element Deleted"<<endl;
- free(tmp);
- return;
- }
- q = start;
- while (q->next->next != NULL)
- {
- /*Element deleted in between*/
- if (q->next->info == value)
- {
- tmp = q->next;
- q->next = tmp->next;
- tmp->next->prev = q;
- cout<<"Element Deleted"<<endl;
- free(tmp);
- return;
- }
- q = q->next;
- }
- /*last element deleted*/
- if (q->next->info == value)
- {
- tmp = q->next;
- free(tmp);
- q->next = NULL;
- cout<<"Element Deleted"<<endl;
- return;
- }
- cout<<"Element "<<value<<" not found"<<endl;
- }
- /*
- * Display elements of Doubly Link List
- */
- void double_llist::display_dlist()// تابع إظهار للعقدة كاملة
- {
- struct node *q;
- if (start == NULL)
- {
- cout<<"List empty,nothing to display"<<endl;
- return;
- }
- q = start;
- cout<<"The Doubly Link List is :"<<endl;
- while (q != NULL)
- {
- cout<<q->info<<" <-> ";
- q = q->next;
- }
- cout<<"NULL"<<endl;
- }
- void double_llist::delete_element_last() // تابع حذف القيمة الاخيرة
- {
- struct node *tmp, *q;
- tmp = start;
- vector<node*> v;
- while(tmp!=NULL)
- {
- v.push_back(tmp);
- tmp=tmp->next;
- }
- int N = v.size();
- delete v[N-1];
- v[N-1]=NULL;
- if(N>1)v[N-2]->next = NULL;
- }
- int double_llist::search_element(int value)// تابع للبحث عن قيمة معينة
- {
- struct node *q = start;
- int cnt = 0;
- while (q != NULL)
- {
- if(q->info==value)return cnt;
- q = q->next;
- cnt++;
- }
- return -1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement