Advertisement
Guest User

Untitled

a guest
Nov 17th, 2019
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.65 KB | None | 0 0
  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstdlib>
  4. using namespace std;
  5.  
  6. struct nod {
  7. int info;
  8. struct nod *next;
  9. struct nod *prev;
  10. }*start, *last;
  11.  
  12. int count = 0;
  13. class CircularDoubleLinkedList {
  14. public:
  15. nod *create_node(int);
  16. void insert_begin();
  17. void insert_end();
  18. void insert_pos();
  19. void delete_pos();
  20. void search();
  21. void update();
  22. void display();
  23. void reverse();
  24. void deleteNum(int);
  25. CircularDoubleLinkedList() {
  26. start = NULL;
  27. last = NULL;
  28. }
  29. };
  30.  
  31. int main() {
  32. int c;
  33. bool loop = true;
  34. CircularDoubleLinkedList cdll;
  35. while (loop) {
  36. cout<<"1.Insert at Beginning"<<endl;
  37. cout<<"2.Insert at End"<<endl;
  38. cout<<"3.Insert at Position"<<endl;
  39. cout<<"4.Delete at Position"<<endl;
  40. cout<<"5.Update Node"<<endl;
  41. cout<<"6.Search Element"<<endl;
  42. cout<<"7.Display List"<<endl;
  43. cout<<"8.Reverse List"<<endl;
  44. cout<<"9.Exit"<<endl;
  45. cout<<"Enter your choice : ";
  46. cin>>c;
  47. switch(c) {
  48. case 1:
  49. cdll.insert_begin();
  50. break;
  51. case 2:
  52. cdll.insert_end();
  53. break;
  54. case 3:
  55. cdll.insert_pos();
  56. break;
  57. case 4:
  58. cdll.delete_pos();
  59. break;
  60. case 5:
  61. cdll.update();
  62. break;
  63. case 6:
  64. cdll.search();
  65. break;
  66. case 7:
  67. cdll.display();
  68. break;
  69. case 8:
  70. cdll.reverse();
  71. break;
  72. case 9:
  73. exit(1);
  74. default:
  75. cout<<"Wrong choice"<<endl;
  76. }
  77. }
  78. return 0;
  79. }
  80. nod* CircularDoubleLinkedList::create_node(int v) {
  81. count++;
  82. struct nod *t;
  83. t = new(struct nod);
  84. t->info = v;
  85. t->next = NULL;
  86. t->prev = NULL;
  87. return t;
  88. }
  89. void CircularDoubleLinkedList::insert_begin() {
  90. int v;
  91. cout<<endl<<"Enter the element to be inserted: ";
  92. cin>>v;
  93. struct nod *t;
  94. t = create_node(v);
  95. if (start == last && start == NULL) {
  96. cout<<"Element inserted in empty list"<<endl;
  97. start = last = t;
  98. start->next = last->next = NULL;
  99. start->prev = last->prev = NULL;
  100. } else {
  101. t->next = start;
  102. start->prev = t;
  103. start = t;
  104. start->prev = last;
  105. last->next = start;
  106. cout<<"Element inserted"<<endl;
  107. }
  108. }
  109. void CircularDoubleLinkedList::insert_end() {
  110. int v;
  111. cout<<endl<<"Enter the element to be inserted: ";
  112. cin>>v;
  113. struct nod *t;
  114. t = create_node(v);
  115. if (start == last && start == NULL) {
  116. cout<<"Element inserted in empty list"<<endl;
  117. start = last = t;
  118. start->next= last->next = NULL;
  119. start->prev = last->prev= NULL;
  120. } else {
  121. last->next= t;
  122. t->prev= last;
  123. last = t;
  124. start->prev = last;
  125. last->next= start;
  126. }
  127. }
  128. void CircularDoubleLinkedList::insert_pos() {
  129. int v, pos, i;
  130. cout<<endl<<"Enter the element to be inserted: ";
  131. cin>>v;
  132. cout<<endl<<"Enter the position of element inserted: ";
  133. cin>>pos;
  134. struct nod *t, *s, *ptr;
  135. t = create_node(v);
  136. if (start == last && start == NULL) {
  137. if (pos == 1) {
  138. start = last = t;
  139. start->next = last->next = NULL;
  140. start->prev = last->prev = NULL;
  141. } else {
  142. cout<<"Position out of range"<<endl;
  143. count--;
  144. return;
  145. }
  146. } else {
  147. if (count < pos) {
  148. cout<<"Position out of range"<<endl;
  149. count--;
  150. return;
  151. }
  152. s = start;
  153. for (i = 1;i <= count;i++) {
  154. ptr = s;
  155. s = s->next;
  156. if (i == pos - 1) {
  157. ptr->next = t;
  158. t->prev= ptr;
  159. t->next= s;
  160. s->prev = t;
  161. cout<<"Element inserted"<<endl;
  162. break;
  163. }
  164. }
  165. }
  166. }
  167. void CircularDoubleLinkedList::delete_pos() {
  168. int pos, i;
  169. nod *ptr, *s;
  170. if (start == last && start == NULL) {
  171. cout<<"List is empty, nothing to delete"<<endl;
  172. return;
  173. }
  174. cout<<endl<<"Enter the position of element to be deleted: ";
  175. cin>>pos;
  176. if (count < pos) {
  177. cout<<"Position out of range"<<endl;
  178. return;
  179. }
  180. s = start;
  181. if(pos == 1) {
  182. count--;
  183. last->next = s->next;
  184. s->next->prev = last;
  185. start = s->next;
  186. free(s);
  187. cout<<"Element Deleted"<<endl;
  188. return;
  189. }
  190. for (i = 0;i < pos - 1;i++ ) {
  191. s = s->next;
  192. ptr = s->prev;
  193. }
  194. ptr->next = s->next;
  195. s->next->prev = ptr;
  196. if (pos == count) {
  197. last = ptr;
  198. }
  199. count--;
  200. free(s);
  201. cout<<"Element Deleted"<<endl;
  202. }
  203. void CircularDoubleLinkedList::update() {
  204. int v, i, pos;
  205. if (start == last && start == NULL) {
  206. cout<<"The List is empty, nothing to update"<<endl;
  207. return;
  208. }
  209. cout<<endl<<"Enter the position of node to be updated: ";
  210. cin>>pos;
  211. cout<<"Enter the new value: ";
  212. cin>>v;
  213. struct nod *s;
  214. if (count < pos) {
  215. cout<<"Position out of range"<<endl;
  216. return;
  217. }
  218. s = start;
  219. if (pos == 1) {
  220. s->info = v;
  221. cout<<"Node Updated"<<endl;
  222. return;
  223. }
  224. for (i=0;i < pos - 1;i++) {
  225. s = s->next;
  226. }
  227. s->info = v;
  228. cout<<"Node Updated"<<endl;
  229. }
  230. void CircularDoubleLinkedList::search() {
  231. int pos = 0, v, i;
  232. bool flag = false;
  233. struct nod *s;
  234. if (start == last && start == NULL) {
  235. cout<<"The List is empty, nothing to search"<<endl;
  236. return;
  237. }
  238. cout<<endl<<"Enter the value to be searched: ";
  239. cin>>v;
  240. s = start;
  241. for (i = 0;i < count;i++) {
  242. pos++;
  243. if (s->info == v) {
  244. cout<<"Element "<<v<<" found at position: "<<pos<<endl;
  245. flag = true;
  246. }
  247. s = s->next;
  248. }
  249. if (!flag)
  250. cout<<"Element not found in the list"<<endl;
  251. }
  252. void CircularDoubleLinkedList::display() {
  253. int i;
  254. struct nod *s;
  255. if (start == last && start == NULL) {
  256. cout<<"The List is empty, nothing to display"<<endl;
  257. return;
  258. }
  259. s = start;
  260. for (i = 0;i < count-1;i++) {
  261. cout<<s->info<<"<->";
  262. s = s->next;
  263. }
  264. cout<<s->info<<endl;
  265. }
  266. void CircularDoubleLinkedList::reverse() {
  267. if (start == last && start == NULL) {
  268. cout<<"The List is empty, nothing to reverse"<<endl;
  269. return;
  270. }
  271. struct nod *p1, *p2;
  272. p1 = start;
  273. p2 = p1->next;
  274. p1->next = NULL;
  275. p1->prev= p2;
  276. while (p2 != start) {
  277. p2->prev = p2->next;
  278. p2->next = p1;
  279. p1 = p2;
  280. p2 = p2->prev;
  281. }
  282. last = start;
  283. start = p1;
  284. cout<<"List Reversed"<<endl;
  285. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement