Advertisement
NhatQuang269

DSLK

May 23rd, 2018
171
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.55 KB | None | 0 0
  1. #include<iostream>
  2. using namespace std;
  3.  
  4. struct node
  5. {
  6.     int data;
  7.     node *pNext;
  8. };
  9.  
  10. struct list
  11. {
  12.     node *pHead;
  13.     node *pTail;
  14. };
  15. void KhoiTao(list &l)
  16. {
  17.     l.pHead = l.pTail = NULL;
  18. }
  19.  
  20. node* KhoiTaonode(int x)
  21. {
  22.     node *p = new node;
  23.     if (p==NULL)
  24.     {
  25.         return NULL;
  26.     }
  27.     else
  28.     {
  29.         p->data = x;
  30.         p->pNext = NULL;
  31.     }
  32.     return p;
  33. }
  34.  
  35. void AddHead(list &l, node *p)
  36. {
  37.     if (l.pHead==NULL)
  38.     {
  39.         l.pHead = l.pTail = p;
  40.     }
  41.     else
  42.     {
  43.         p->pNext = l.pHead;
  44.         l.pHead = p;
  45.     }
  46. }
  47.  
  48. void AddTail(list &l, node *p)
  49. {
  50.     if (l.pHead==NULL)
  51.     {
  52.         l.pHead = l.pTail = p;
  53.     }
  54.     else
  55.     {
  56.         l.pTail->pNext = p;
  57.         l.pTail = p;
  58.     }
  59. }
  60. void Xuat(list l)
  61. {
  62.     for (node *k=l.pHead ; k!=NULL; k=k->pNext)
  63.     {
  64.         cout << "  " << k->data;
  65.     }
  66. }
  67. void themsauQ(list &l,node *p)
  68. {
  69.     int x;
  70.     cout << "Nhap gia tri node q";
  71.     cin >> x;
  72.     node *q = KhoiTaonode(x);
  73.     //neu danh sach chi co 1 phan tu va phan tu do cung chinh la node q =>bai toan tro thanh  add tail
  74.     if (q->data==l.pHead->data&&l.pHead->pNext==NULL)
  75.     {
  76.         AddTail(l, p);
  77.     }
  78.     else
  79.     {
  80.         for (node *k=l.pHead;k!=NULL;k=k->pNext)
  81.         {
  82.             if (q->data == k->data)
  83.             {
  84.                 node *h = KhoiTaonode(p->data);//Phải thêm qua 1 node trung gian
  85.                 node *g = k->pNext;//Phải thêm qua 1 node trung gian
  86.                 h->pNext = g;
  87.                 k->pNext = h;
  88.             }
  89.         }
  90.     }
  91. }
  92. void ThemtruocQ(list &l,node *p)
  93. {
  94.     int x;
  95.     cout << "\nNhap gia tri node q";
  96.     cin >> x;
  97.     node *q = KhoiTaonode(x);
  98.     node *t = new node;
  99.     if (q->data==l.pHead->data&&l.pHead->pNext==NULL)
  100.     {
  101.         AddHead(l, p);
  102.     }
  103.     else
  104.     {
  105.         for (node *k = l.pHead; k != NULL; k = k->pNext)
  106.         {
  107.             if (k->data==q->data)
  108.             {
  109.                 node *g = KhoiTaonode(p->data);
  110.                 g->pNext = k;
  111.                 t->pNext = g;
  112.             }
  113.             t = k;
  114.         }
  115.     }
  116. }
  117. void addvaovtbatky(list &l, node *p, int vt)
  118. {
  119.     //lay so luong node trong ds
  120.     int n = 0;
  121.     for ( node *k=l.pHead;k!=NULL;k=k->pNext)
  122.     {
  123.         n++;
  124.     }
  125.     //danh sach rong
  126.     if (l.pHead==NULL||vt==1)
  127.     {
  128.         AddHead(l, p);
  129.     }
  130.     else if (vt == n + 1)
  131.     {
  132.         AddTail(l, p);
  133.     }
  134.     else
  135.     {
  136.  
  137.         //int x;
  138.         ///*cout << "\nNhap gia tri node q";*/
  139.         //cin >> x;
  140.     /*  node *q = KhoiTaonode(x);*/
  141.         node *t = new node;
  142.             int dem = 0;
  143.             for (node *k = l.pHead; k != NULL; k = k->pNext)
  144.             {
  145.                 dem++;
  146.                 if (vt==dem)
  147.                 {
  148.                     node *g = KhoiTaonode(p->data);
  149.                     g->pNext = k;
  150.                     t->pNext = g;
  151.                     break;
  152.                 }
  153.                 t = k;
  154.             }
  155.        
  156.     }
  157. }
  158. void XoaDau(list &l)
  159. {
  160.     if (l.pHead==NULL)
  161.     {
  162.         return;
  163.     }
  164.     else
  165.     {
  166.         node *p = l.pHead;
  167.         l.pHead = l.pHead->pNext;
  168.         delete p;
  169.     }
  170. }
  171.  
  172. void XoaCuoi(list &l)
  173. {
  174.     if (l.pHead==NULL)
  175.     {
  176.         return;
  177.     }
  178.     else
  179.     {
  180.         for (node *k=l.pHead;k!=NULL;k=k->pNext)
  181.         {
  182.             if (k->pNext==l.pTail)
  183.             {
  184.                 delete l.pTail;
  185.                 k->pNext = NULL;
  186.                 l.pTail = k;
  187.             }
  188.         }
  189.     }
  190. }
  191.  
  192. void xoasaonodeq(list &l, node *q)
  193. {
  194.     /*int x;
  195.     cout << "\Nhap gia tri node q can xoa";
  196.     cin >> x;
  197.     node *q = KhoiTaonode(x);*/
  198.     for (node *k=l.pHead;k!=NULL;k=k->pNext)
  199.     {
  200.         if (q->data == k->data)
  201.         {
  202.             node*p = k->pNext;
  203.             k->pNext = p->pNext;
  204.             delete p;
  205.         }
  206.     }
  207. }
  208. //void xoa1nodep(list &l, node *p)
  209. //{
  210. //  node *t;
  211. //  if (p->pNext!=NULL)
  212. //  {
  213. //      t = p->pNext;
  214. //      p->pNext = t->pNext;
  215. //      free(t);
  216. //  }
  217. //}
  218. void XoaNodeKhoakBatky(list &l, int x)
  219. {
  220.     node *g = new node;
  221.     if (l.pHead->data==x)
  222.     {
  223.         XoaDau(l);
  224.     }
  225.     else if (l.pTail->data == x)
  226.     {
  227.         XoaCuoi(l);
  228.     }
  229.     else
  230.     {
  231.         for (node *k = l.pHead; k != NULL; k = k->pNext)
  232.         {
  233.             if (k->data==x)
  234.             {
  235.                 g->pNext = k->pNext;
  236.                 delete k;
  237.                 return;
  238.             }
  239.             g = k;
  240.         }
  241.     }
  242. }
  243.  
  244. void XoaTrungnhau(list &l)
  245. {
  246.     for (node *k=l.pHead;k!=l.pTail;k=k->pNext)
  247.     {
  248.         for (node *g = k->pNext; g != NULL;g=g->pNext)
  249.         {
  250.             if (k->data==g->data)
  251.             {
  252.                 XoaNodeKhoakBatky(l, g->data);
  253.             }
  254.             g = g->pNext;
  255.         }
  256.     }
  257.  
  258. }
  259. void Menu(list &l)
  260. {
  261.     while(69)
  262.     {
  263.     system("cls");
  264.     int luachon;
  265.     cout << "\n\n\t\t====== Menu ======";
  266.     cout << "\n\t1. Nhap node vao danh sach";
  267.     cout << "\n\t2. Xuat danh sach lien ket don";
  268.     cout << "\n\t3. Them sau node q";
  269.     cout << "\n\t4. Them truoc node q";
  270.     cout << "\n\t5. Them vao vi tri bat ki";
  271.     cout << "\n\t6. Xoa dau";
  272.     cout << "\n\t7. Xoa cuoi";
  273.     cout << "\n\t8. Xoa sao node q";
  274.     cout << "\n\t9. Xoa phan tu bat ky";
  275.     cout << "\n\t10. Xoa phan tu trung nhau";
  276.     cout << "\n\t11. Thoat" << endl;
  277.     cin >> luachon;
  278.         if (luachon == 1)
  279.         {
  280.             int x;
  281.             cout << "\nNhap gia tri so nguyen: ";
  282.             cin >> x;
  283.             node *p = KhoiTaonode(x);
  284.             AddTail(l, p);
  285.         }
  286.         else if (luachon == 2)
  287.         {
  288.             Xuat(l);
  289.             system("pause");
  290.         }
  291.         else if (luachon == 3)
  292.         {
  293.             int a;
  294.             cout << "\nNhap gia tri p can them";
  295.             cin >> a;
  296.             node *p = KhoiTaonode(a);
  297.             themsauQ(l, p);
  298.         }
  299.         else if (luachon==4)
  300.         {
  301.             int a;
  302.             cout << "\nNhap gia tri p can them";
  303.             cin >> a;
  304.             node *p = KhoiTaonode(a);
  305.             ThemtruocQ(l, p);
  306.         }
  307.         else if (luachon == 5)
  308.         {
  309.             int a;
  310.             cout << "\nNhap gia tri node p";
  311.             cin >> a;
  312.             node *p = KhoiTaonode(a);
  313.             int vt;
  314.             cout << "\nNhap vi tri: ";
  315.             cin >> vt;
  316.             addvaovtbatky(l, p, vt);
  317.         }
  318.         else if (luachon == 6)
  319.         {
  320.             XoaDau(l);
  321.         }
  322.         else if (luachon == 7)
  323.         {
  324.             XoaCuoi(l);
  325.         }
  326.         else if (luachon == 8)
  327.         {
  328.             int x;
  329.             cout << "\Nhap gia tri node q can xoa";
  330.             cin >> x;
  331.             node *q = KhoiTaonode(x);
  332.             xoasaonodeq(l, q);
  333.         }
  334.         else if (luachon == 9)
  335.         {
  336.             int x;
  337.             cout << "\nNhap gia tri can xoa ";
  338.             cin >> x;
  339.             XoaNodeKhoakBatky(l, x);
  340.         }
  341.         else if(luachon==10)
  342.         {
  343.             XoaTrungnhau(l);
  344.         }
  345.         else
  346.         {
  347.             break;
  348.         }
  349.     }
  350. }
  351.  
  352. int main()
  353. {
  354.     list l;
  355.     KhoiTao(l);
  356.     Menu(l);
  357.     system("pause");
  358.     return 0;
  359. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement