[text] 1

Viewer

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3.  
  4. struct Node{
  5.         int data;// luu thong tin
  6.         struct Node *pNext;// tro toi ptu tiep theo
  7.          
  8. };
  9. void creNode(Node *&pHead){
  10.         int repeat;
  11.         Node *p = pHead;
  12.         do{
  13.                 if(pHead == NULL){
  14.                         pHead = (Node*)malloc(sizeof(Node));
  15.                         p = pHead;
  16.                 }else{
  17.                         p = pHead;
  18.                         while(p->pNext != NULL) p = p->pNext;
  19.                         p->pNext = (Node*)malloc(sizeof(Node));
  20.                         p = p->pNext;
  21.                 }
  22.                 printf("Nhap du lieu cho danh sach : \n");
  23.                 scanf("%d",&(p->data));
  24.                 p->pNext = NULL;
  25.                 printf("1.Nhap tiep: \n0.Thoat\n ");
  26.                 scanf("%d",&repeat);
  27.         }while(repeat != 0);
  28. }
  29. void inDS(Node *&pHead){
  30.         Node *p = pHead;
  31.         if(pHead == NULL) return;
  32.         while(p != NULL){
  33.                 printf("%d\t",p->data);
  34.                 p = p->pNext;
  35.         }
  36.        
  37. }
  38. int soPT(Node *&pHead){
  39.         Node *p = pHead;
  40.         int count = 0;
  41.         while(p != NULL){
  42.                 count++;
  43.                 p=p->pNext;
  44.         }
  45.         return count;
  46. }
  47. Node *make_Node(Node *p, int x){
  48.         p = (Node*)malloc(sizeof(Node));
  49.         p->pNext = NULL;
  50.         p->data = x;
  51.         return p;
  52. }
  53.  
  54. bool search(Node *pHead, int x){
  55.         Node *p = pHead;
  56.         while(p != NULL && p->data != x){
  57.                 p = p->pNext;
  58.         }
  59.         if(p != NULL) return true;
  60.         else return false;
  61. }
  62. void insertFirst(Node *&pHead,int x){
  63.         Node *p;
  64.         p = make_Node(p,x);
  65.         p->pNext = pHead;
  66.         pHead = p;
  67. }
  68. void insertX(Node *&pHead, int x,int vitri){
  69.         Node *p, *q = pHead;
  70.         p = make_Node(p,x);
  71.         int i = 1;
  72.         if(vitri < 1 || vitri > soPT(pHead) + 1){
  73.                 printf("Vi tri khong hop le");
  74.         }else{
  75.                 p = make_Node(p,x);
  76.                 if(vitri == 1){
  77.                         insertFirst(pHead,x);
  78.                 }else{
  79.                         while(q != NULL && i != vitri-1){
  80.                                 i++;
  81.                                 q = q->pNext;
  82.                         }
  83.                         p->pNext = q->pNext;
  84.                         q->pNext = p;
  85.                 }
  86.         }
  87. }
  88. Node *insertAfter(Node *pHead,int x){
  89.         Node *p,*q;
  90.         p = make_Node(p,x);
  91.         if(pHead == NULL){
  92.                 p->pNext = NULL;
  93.                 pHead = p;
  94.         }else{
  95.                 q = pHead;
  96.                 while(q->pNext != NULL){
  97.                         q = q->pNext;
  98.                 }
  99.         q->pNext = p;
  100.         }
  101.         return pHead;
  102. }
  103. Node *delete_First(Node *&pHead){
  104.         if(pHead == NULL){
  105.                 printf("DS rong");
  106.         }else{
  107.                 pHead = pHead->pNext;
  108.         }
  109.         return pHead;
  110. }
  111. Node *delete_After(Node *&pHead){
  112.         Node *p = pHead;
  113.         if(pHead == NULL){
  114.                 printf("DS rong");
  115.         }else{
  116.                 while(p->pNext->pNext != NULL){
  117.                         p = p->pNext;
  118.                 }
  119.         p->pNext = NULL;
  120.         }
  121. }
  122. void delete_X(Node *&pHead, int vitri){
  123.         Node *p = pHead;
  124.         int i = 1;
  125.         if(vitri == 1 || pHead == NULL || pHead->pNext == NULL){
  126.                 delete_First(pHead);
  127.         }else{
  128.                 while(p->pNext->pNext != NULL && i != vitri-1){
  129.                         p = p->pNext;
  130.                         ++i;
  131.                 }
  132.         p->pNext = p->pNext->pNext;
  133.         }
  134. //      return pHead;
  135. }
  136. int main(){
  137.         Node *pHead = NULL;
  138.         creNode(pHead);
  139.         inDS(pHead);
  140.         printf("\n");
  141.         int luachon;
  142.         do{
  143.                 printf("\n\nMoi ban chon: ");
  144.                 printf("\n1.Them phan tu vao dau DS\n2.Them phan tu vao vi tri bat ki cua DS\n3.Them phan tu vao cuoi DS\n4.Xoa phan tu dau DS\n5.Xoa phan tu o vi tri bat ki cua DS\n6.Xoa phan tu cuoi DS\n0.Thoat\n");
  145.                 scanf("%d",&luachon);
  146.                 switch(luachon){
  147.                         case 1:{
  148.                                 int x;
  149.                                 printf("\nNhap phan tu can them: ");
  150.                                 scanf("%d",&x);
  151.                                 insertFirst(pHead,x);
  152.                                 printf("\n");
  153.                                 inDS(pHead);
  154.                                 break;
  155.                         }
  156.                         case 2:{
  157.                                 int x;
  158.                                 int vitri;
  159.                                 printf("\nNhap vi tri: ");
  160.                                 scanf("%d",&vitri);
  161.                                 printf("\nNhap phan tu can them: ");
  162.                                 scanf("%d",&x);
  163.                                 insertX(pHead,x,vitri);
  164.                                 printf("\n");
  165.                                 inDS(pHead);
  166.                                 break;
  167.                         }
  168.                         case 3:{
  169.                                 int x;
  170.                                 printf("\nNhap phan tu can them: ");
  171.                                 scanf("%d",&x);
  172.                                 insertAfter(pHead,x);
  173.                                 printf("\n");
  174.                                 inDS(pHead);
  175.                                 break;
  176.                         }
  177.                         case 4:{
  178.                                 delete_First(pHead);
  179.                                 printf("\n");
  180.                                 inDS(pHead);
  181.                                 break;
  182.                         }
  183.                         case 5:{
  184.                                 int x;
  185.                                 printf("\nNhap vi tri can xoa: ");
  186.                                 scanf("%d",&x);
  187.                                 delete_X(pHead,x);
  188.                                 printf("\n");
  189.                                 inDS(pHead);
  190.                                 break;
  191.                         }
  192.                         case 6:{
  193.                                 delete_After(pHead);
  194.                                 printf("\n");
  195.                                 inDS(pHead);
  196.                                 break;
  197.                         }
  198.                         default: printf("Chon lai !!!");
  199.                 }
  200.         }while(luachon != 0);
  201.         return 0;
  202. }
  203.  

Editor

You can edit this paste and save as new: