Advertisement
rado_dimitrov66

Untitled

May 21st, 2024
29
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.65 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. struct Node1 {
  6. int data;
  7. Node1* prev;
  8. Node1* next;
  9. } * START1;
  10.  
  11. struct Node2 {
  12. int data;
  13. Node2* prev;
  14. Node2* next;
  15. }* START2 = NULL;
  16.  
  17. struct Node3 {
  18. int data;
  19. Node3* prev;
  20. Node3* next;
  21. }* START3 ;
  22.  
  23.  
  24.  
  25. Node1* createNode1(int data) {
  26. Node1* newNode = new Node1;
  27. newNode->data = data;
  28. newNode->prev = NULL;
  29. newNode->next = NULL;
  30. return newNode;
  31. }
  32.  
  33. Node2* createNode2(int data) {
  34. Node2* newNode = new Node2;
  35. newNode->data = data;
  36. newNode->prev = NULL;
  37. newNode->next = NULL;
  38. return newNode;
  39. }
  40.  
  41. Node3* createNode3(int data) {
  42. Node3* newNode = new Node3;
  43. newNode->data = data;
  44. newNode->prev = NULL;
  45. newNode->next = NULL;
  46. return newNode;
  47. }
  48.  
  49. void appendNode1(Node1*& head, int data) {
  50. Node1* newNode = createNode1(data);
  51. if (head == NULL) {
  52. head = newNode;
  53. }
  54. else {
  55. Node1* temp = head;
  56. while (temp->next != NULL) {
  57. temp = temp->next;
  58. }
  59. temp->next = newNode;
  60. newNode->prev = temp;
  61. }
  62. }
  63.  
  64. void appendNode2(Node2*& head, int data) {
  65. Node2* newNode = createNode2(data);
  66. if (head == NULL) {
  67. head = newNode;
  68. }
  69. else {
  70. Node2* temp = head;
  71. while (temp->next != NULL) {
  72. temp = temp->next;
  73. }
  74. temp->next = newNode;
  75. newNode->prev = temp;
  76. }
  77. }
  78.  
  79. void appendNode3(Node3*& head, int data) {
  80. Node3* newNode = createNode3(data);
  81. if (head == NULL) {
  82. head = newNode;
  83. }
  84. else {
  85. Node3* temp = head;
  86. while (temp->next != NULL) {
  87. temp = temp->next;
  88. }
  89. temp->next = newNode;
  90. newNode->prev = temp;
  91. }
  92. }
  93.  
  94. void deleteNode1(Node1*& head, int data) {
  95. Node1* temp = head;
  96. while (temp != NULL && temp->data != data) {
  97. temp = temp->next;
  98. }
  99. if (temp != NULL) {
  100. if (temp->prev != NULL) {
  101. temp->prev->next = temp->next;
  102. }
  103. else {
  104. head = temp->next;
  105. }
  106. if (temp->next != NULL) {
  107. temp->next->prev = temp->prev;
  108. }
  109. delete temp;
  110. }
  111. }
  112.  
  113. void deleteNode2(Node2*& head, int data) {
  114. Node2* temp = head;
  115. while (temp != NULL && temp->data != data) {
  116. temp = temp->next;
  117. }
  118. if (temp != NULL) {
  119. if (temp->prev != NULL) {
  120. temp->prev->next = temp->next;
  121. }
  122. else {
  123. head = temp->next;
  124. }
  125. if (temp->next != NULL) {
  126. temp->next->prev = temp->prev;
  127. }
  128. delete temp;
  129. }
  130. }
  131.  
  132. void printList1(Node1* head) {
  133. Node1* temp = head;
  134. while (temp != NULL) {
  135. cout << temp->data << " ";
  136. temp = temp->next;
  137. }
  138. cout << endl;
  139. }
  140.  
  141. void printList2(Node2* head) {
  142. Node2* temp = head;
  143. while (temp != NULL) {
  144. cout << temp->data << " ";
  145. temp = temp->next;
  146. }
  147. cout << endl;
  148. }
  149.  
  150. void printList3(Node3* head) {
  151. Node3* temp = head;
  152. while (temp != NULL) {
  153. cout << temp->data << " ";
  154. temp = temp->next;
  155. }
  156. cout << endl;
  157. }
  158.  
  159. Node3* mergeSortedLists(Node1* start1, Node2* start2) {
  160. Node3* result = NULL;
  161.  
  162. Node1* temp1 = start1;
  163. Node2* temp2 = start2;
  164.  
  165. while (temp1 != NULL && temp2 != NULL) {
  166. if (temp1->data <= temp2->data) {
  167. appendNode3(result, temp1->data);
  168. temp1 = temp1->next;
  169. }
  170. else {
  171. appendNode3(result, temp2->data);
  172. temp2 = temp2->next;
  173. }
  174. }
  175.  
  176. while (temp1 != NULL) {
  177. appendNode3(result, temp1->data);
  178. temp1 = temp1->next;
  179. }
  180.  
  181. while (temp2 != NULL) {
  182. appendNode3(result, temp2->data);
  183. temp2 = temp2->next;
  184. }
  185.  
  186. return result;
  187. }
  188.  
  189. void menu() {
  190. int choice, data;
  191.  
  192. do {
  193. cout << "1. Add to List 1\n";
  194. cout << "2. Add to List 2\n";
  195. cout << "3. Delete from List 1\n";
  196. cout << "4. Delete from List 2\n";
  197. cout << "5. Print List 1\n";
  198. cout << "6. Print List 2\n";
  199. cout << "7. Merge Lists\n";
  200. cout << "8. Print Merged List\n";
  201. cout << "9. Exit\n";
  202. cout << "Enter your choice: ";
  203. cin >> choice;
  204.  
  205. switch (choice) {
  206. case 1:
  207. cout << "Enter data to add to List 1: ";
  208. cin >> data;
  209. appendNode1(START1, data);
  210. break;
  211. case 2:
  212. cout << "Enter data to add to List 2: ";
  213. cin >> data;
  214. appendNode2(START2, data);
  215. break;
  216. case 3:
  217. cout << "Enter data to delete from List 1: ";
  218. cin >> data;
  219. deleteNode1(START1, data);
  220. break;
  221. case 4:
  222. cout << "Enter data to delete from List 2: ";
  223. cin >> data;
  224. deleteNode2(START2, data);
  225. break;
  226. case 5:
  227. cout << "List 1: ";
  228. printList1(START1);
  229. break;
  230. case 6:
  231. cout << "List 2: ";
  232. printList2(START2);
  233. break;
  234. case 7:
  235. START3 = mergeSortedLists(START1, START2);
  236. cout << "Lists merged.\n";
  237. break;
  238. case 8:
  239. cout << "Merged List: ";
  240. printList3(START3);
  241. break;
  242. case 9:
  243. cout << "Exiting.\n";
  244. break;
  245. default:
  246. cout << "Invalid choice. Please try again.\n";
  247. }
  248. } while (choice != 9);
  249. }
  250.  
  251. int main() {
  252. menu();
  253. return 0;
  254. }
  255.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement