Advertisement
Guest User

Untitled

a guest
Oct 24th, 2016
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.24 KB | None | 0 0
  1. #include <iostream>
  2. #include <ctime>
  3. using namespace std;
  4.  
  5. struct Node
  6. {
  7. int data = 0;
  8. Node *prev, *next;
  9. Node() :prev(NULL), next(NULL) {};
  10. };
  11. class List {
  12.  
  13. int length = 0;
  14.  
  15. Node *head, *tail, *cur;
  16. public:
  17. List() : head(NULL), tail(NULL), cur(NULL) {};
  18. ~List();
  19. Node* creat_node(int value);
  20. void add_begin(int data);
  21. void add_last(int data);
  22. void insert(int data, int index);
  23. void pop_begin();
  24. void pop_end();
  25. //void del(int index);
  26. int get(int index);
  27. void show();
  28. int Count();
  29. };
  30.  
  31. List::~List() {
  32. while (head) {
  33. tail = head->next;
  34. delete head;
  35. head = tail;
  36. }
  37. }
  38.  
  39. Node* List::creat_node(int value) {
  40. length++;
  41. Node*temp = new Node();
  42. temp->data = value;
  43. temp->next = NULL;
  44. temp->prev = NULL;
  45. return temp;
  46. }
  47.  
  48. void List::add_begin(int data) {
  49. Node *temp = new Node;
  50. temp = creat_node(data);
  51. if (head == tail && head == NULL) {
  52. head = tail = temp;
  53. head->next = tail->next = NULL;
  54. head->prev = tail->prev = NULL;
  55. }
  56. else
  57. {
  58. temp->next = head;
  59. head->prev = temp;
  60. head = temp;
  61. head->prev = tail;
  62. tail->next = head;
  63. }
  64. }
  65.  
  66. void List::add_last(int data) {
  67. Node *temp = new Node;
  68. temp = creat_node(data);
  69. if (head == tail && head == NULL) {
  70. head = tail = temp;
  71. head->next = tail->next = NULL;
  72. head->prev = tail->prev = NULL;
  73. }
  74. else
  75. {
  76. tail->next = temp;
  77. temp->prev = tail;
  78. tail = temp;
  79. head->prev = tail;
  80. tail->next = head;
  81. }
  82. }
  83.  
  84. void List::insert(int data, int index)
  85. {
  86. Node *temp, *help, *ptr;
  87. temp = creat_node(data);
  88. if (head == tail && head == NULL)
  89. {
  90. if (index == 1) {
  91. head = tail = NULL;
  92. head->next = tail->next = NULL;
  93. head->prev = tail->prev = NULL;
  94. }
  95. else
  96. {
  97. cout << "Position out of range" << endl;
  98. length--;
  99. return;
  100. }
  101. }
  102. else
  103. {
  104. if (length < index)
  105. {
  106. cout << "Position out of range" << endl;
  107. length--;
  108. return;
  109. }
  110. else if (index == 0) {
  111. temp->next = head;
  112. head->prev = temp;
  113. head = temp;
  114. head->prev = tail;
  115. tail->next = head;
  116. return;
  117. }
  118. else if (index == length-1) {
  119. tail->next = temp;
  120. temp->prev = tail;
  121. tail = temp;
  122. head->prev = tail;
  123. tail->next = head;
  124. return;
  125. }
  126. else
  127. {
  128. help = head;
  129. for (int i = 0; i < length; i++)
  130. {
  131. ptr = help;
  132. help = help->next;
  133. if (i == index - 1) {
  134. ptr->next = temp;
  135. temp->prev = ptr;
  136. temp->next = help;
  137. help->prev = temp;
  138. cout << "Element inserted" << endl;
  139. break;
  140. }
  141.  
  142. }
  143. }
  144. }
  145. }
  146.  
  147. void List::pop_begin() {
  148. Node *temp = head;
  149. Node *help = new Node;
  150. if (length > 0)
  151. {
  152. if (tail->prev == NULL)
  153. {
  154. head = NULL;
  155. tail = NULL;
  156. cur = NULL;
  157. }
  158. else
  159. {
  160. head = head->next;
  161. head->prev = tail;
  162. tail->next = head;
  163. cur = head;
  164. }
  165. }
  166. else
  167. {
  168. cout << "List is empty " << endl;
  169. return;
  170. }
  171. cout << "Delete element: " << temp->data << endl;
  172. delete temp;
  173. length--;
  174. }
  175.  
  176. void List::pop_end()
  177. {
  178. Node *temp = tail;
  179. if (length > 0)
  180. {
  181. if (tail->prev == NULL)
  182. {
  183. head = NULL;
  184. tail = NULL;
  185. cur = NULL;
  186. }
  187. else
  188. {
  189. tail = tail->prev;
  190. tail->next = head;
  191. head->prev = tail;
  192. cur = tail;
  193. }
  194. }
  195. else
  196. {
  197. cout << "List is empty " << endl;
  198. return;
  199. }
  200. cout << "Delete element: " << temp->data << endl;
  201. delete temp;
  202. length--;
  203. }
  204.  
  205.  
  206.  
  207.  
  208. int List::get(int index) {
  209. Node *temp = head;
  210. for (int i = 0; i < index; i++) {
  211. if (temp != tail)
  212. {
  213. temp = temp->next;
  214. }
  215. else
  216. temp = head;
  217. }
  218. return temp->data;
  219. }
  220.  
  221. int List::Count(){
  222. return length;
  223. }
  224.  
  225. void List::show() {
  226. Node *temp = head;
  227. for (int i = 0; i < length - 1; i++)
  228. {
  229. cout << temp->data << endl;
  230. temp = temp->next;
  231. }
  232. cout << temp->data << endl;
  233. }
  234.  
  235. int main() {
  236.  
  237. List a;
  238. while (1)
  239. {
  240. int choice = 0;
  241. cout << "Operations on Doubly Circular linked list" << endl;
  242. cout << "1.Insert at Beginning" << endl;
  243. cout << "2.Insert at Last" << endl;
  244. cout << "3.Insert at Position" << endl;
  245. cout << "4.Delete at begin" << endl;
  246. cout << "5.Delete at end" << endl;
  247. cout << "6.Show list" << endl;
  248. cout << "7.Show length list" << endl;
  249. cout << "8.Element of index" << endl;
  250. cout << "Enter your choice : ";
  251. cin >> choice;
  252. switch (choice)
  253. {
  254. case 1:
  255. {
  256. int n;
  257. cout << "Enter number element(begin) : ";
  258. cin >> n;
  259. for (int i = 0; i < n; i++)
  260. {
  261. int data;
  262. cin >> data;
  263. a.add_begin(data);
  264. }
  265. break;
  266. }
  267. case 2:
  268. {
  269. int n;
  270. cout << "Enter number element(last) : ";
  271. cin >> n;
  272. for (int i = 0; i < n; i++)
  273. {
  274. int data;
  275. cin >> data;
  276. a.add_last(data);
  277. }
  278. break;
  279. }
  280. case 3:
  281. {
  282. int data, index;
  283. cout << "Insert element : ";
  284. cin >> data;
  285. cout << "Position : ";
  286. cin >> index;
  287. a.insert(data, index);
  288. break;
  289. }
  290. case 4: {
  291. a.pop_begin();
  292. break;
  293. }
  294. case 5: {
  295. a.pop_end();
  296. break;
  297. }
  298. case 6:
  299. a.show();
  300. break;
  301. case 7:
  302. a.Count();
  303. break;
  304. case 8:
  305. {
  306. int index;
  307. cout << "Get element : ";
  308. cin >> index;
  309. cout << a.get(index) << endl;
  310. break;
  311. }
  312. case 9:
  313. exit(1);
  314. default:
  315. cout << "Wrong choice" << endl;
  316. }
  317. }
  318. system("pause");
  319. return 0;
  320. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement