Advertisement
Guest User

123

a guest
Mar 19th, 2019
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.71 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include <iostream>
  3. #include <conio.h>
  4.  
  5. using namespace std;
  6.  
  7. struct Node{
  8.     int d;
  9.     Node *next;
  10.     Node *prev;
  11. };
  12.  
  13. Node * first (int d);
  14. void add (Node ** pend, int d);
  15. Node *find (Node *const pbeg, int i);
  16. bool remove (Node **pbeg, Node **pend, int key);
  17. Node * insert (Node * const pbeg, Node **pend, int key, int d);
  18.  
  19. int main() {
  20.     Node *pbeg = first(1);
  21.     Node *pend = pbeg;
  22.     for (int i=2; i<6;i++) add (&pend, i);
  23.     insert (pbeg, &pend,2,200);
  24.     if (!remove (&pbeg, &pend, 5)) cout << "не найден";
  25.     Node *pv  = pbeg;
  26.     while (pv) {
  27.         cout << pv ->d << ' ';
  28.         pv = pv->next;
  29.     }
  30.     system ("Pause");
  31.     return 0;
  32. }
  33.  
  34. Node *first (int d) {
  35.     Node *pv = new Node;
  36.     pv->d = d; pv-> next = 0; pv-> prev = 0;
  37.     return pv;
  38. }
  39.  
  40. void add (Node **pend, int d)
  41. {
  42.     Node *pv = new Node;
  43.     pv->d=d; pv->next=0; pv->prev=*pend;
  44.     (*pend)->next=pv;
  45.     *pend=pv;
  46. }
  47.  
  48. Node *find(Node *const pbeg, int d) {
  49.     Node *pv = pbeg;
  50.     while (pv) {
  51.         if (pv->d == d) break;
  52.         pv=pv->next;
  53.     }
  54.     return pv;
  55. }
  56.  
  57. bool remove (Node **pbeg, Node **pend, int key) {
  58.     if (Node *pkey = find (*pbeg, key)) {
  59.         if (pkey == *pbeg) {
  60.             *pbeg = (*pbeg) -> next;
  61.             (*pbeg)->prev=0;
  62.         } else if (pkey == *pend) {
  63.             *pend = (*pend) -> prev;
  64.             (*pend)->next=0;
  65.         } else {
  66.             (pkey -> prev) -> next = pkey -> next;
  67.             (pkey -> next) -> prev = pkey -> prev;
  68.         }
  69.         delete pkey;
  70.         return true;
  71.     }
  72.     return false;
  73. }
  74.  
  75. Node * insert (Node * const pbeg, Node **pend, int key, int d) {
  76.     if (Node *pkey = find (pbeg, key)) {
  77.         Node *pv=new Node;
  78.         pv->d = d;
  79.         pv->next=pkey->next;
  80.         pv->prev=pkey;
  81.         pkey->next=pv;
  82.         if(pkey != *pend) (pv->next)->prev=pv;
  83.         else *pend = pv;
  84.         return pv;
  85.     }
  86.     return 0;
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement