Advertisement
J00ker

Untitled

Jun 4th, 2015
259
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.56 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3.  
  4. using namespace std;
  5.  
  6. struct Nod
  7. {
  8.     int info;
  9.     Nod *stg, *drp;
  10. };
  11.  
  12. Nod *head, *tail;
  13.  
  14. void Init()                     /// Initializare
  15. {
  16.     head = tail = NULL;
  17. }
  18.  
  19. void Creare(int x)              /// Creare l.d.i cu un nod
  20. {
  21.     head = new Nod;
  22.     head -> info = x;
  23.     head -> drp = NULL;
  24.     head -> stg = NULL;
  25.     tail = head;
  26. }
  27.  
  28. void AdInceput(int x)           /// Adaugarea la inceput
  29. {
  30.     Nod *p;
  31.     p = new Nod;
  32.     p -> info = x;
  33.     p -> drp = head;
  34.     p -> stg = NULL;
  35.     head -> stg = p;
  36.     head = p;
  37. }
  38.  
  39. void AdSfarsit(int x)           /// Adaugarea la sfarsit
  40. {
  41.     Nod *p;
  42.     p = new Nod;
  43.     p -> info = x;
  44.     p -> stg = tail;
  45.     p -> drp = NULL;
  46.     tail -> drp = p;
  47.     tail = p;
  48. }
  49.  
  50. void AdDupaNod(Nod *p, int x)   /// Adaugarea dupa un nod
  51. {
  52.     Nod *q;
  53.     q = new Nod;
  54.     q -> info = x;
  55.     q -> stg = p;
  56.     q -> drp = p -> drp;
  57.     p -> drp = q;
  58.     p -> drp -> stg = q;
  59. }
  60.  
  61. void ParcSD()                   /// Parcurgerea St->Dr
  62. {
  63.     for(Nod *p = head; p != NULL; p = p -> drp)
  64.         cout << p -> info << " ";
  65.     cout << "\n";
  66. }
  67.  
  68. void ParcDS()                   /// Parcurgerea Dr->St
  69. {
  70.     for(Nod *p = tail; p != NULL; p = p -> stg)
  71.         cout << p -> info << " ";
  72.     cout << "\n";
  73. }
  74.  
  75. Nod *Cautare(int x)             /// Cauta in lista nodul cu informatia x
  76. {
  77.     for(Nod *p = head; p != NULL; p = p -> drp)
  78.         if(p -> info == x) return p;
  79.     return NULL;
  80. }
  81.  
  82. void StInterior(Nod *p)         /// Nodul p care este sters se afla in interiorul listei
  83. {
  84.     p -> stg -> drp = p -> drp;
  85.     p -> drp -> stg = p -> stg;
  86.     delete p;
  87. }
  88.  
  89. void StInceput()                /// Stergerea primului nod
  90. {
  91.     Nod *p = head;
  92.     p -> drp -> stg = NULL;
  93.     head = head -> drp;
  94.     delete p;
  95. }
  96.  
  97. void StSfarsit()                /// Stergerea ultimului nod
  98. {
  99.     Nod *p = tail;
  100.     p -> stg -> drp = NULL;
  101.     tail = tail -> stg;
  102.     delete p;
  103. }
  104.  
  105. int main()
  106. {
  107.     int n, x;
  108.     ifstream fin("fis.in");
  109.     fin >> n >> x;
  110.     Creare(x);
  111.     for(int i = 2; i <= n; i++)
  112.     {
  113.         fin >> x;
  114.         AdSfarsit(x);
  115.     }
  116.     ParcSD();
  117.  
  118.     Nod *p, *aux;
  119.     for(p = head; p -> drp -> drp != NULL; p = p -> drp)
  120.     {
  121.         for(aux = p -> drp; aux != NULL; aux = aux -> drp)
  122.             if(aux -> info == p -> info)
  123.             {
  124.                 if(aux -> drp == NULL)
  125.                     StSfarsit();
  126.                 else
  127.                     StInterior(aux);
  128.             }
  129.     }
  130.     ParcSD();
  131.  
  132.     return 0;
  133. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement