[cpp] 5

Viewer

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<conio.h>
  4. // khai báo
  5. struct Node{
  6.         int Data;
  7.         struct Node *pNext;
  8. };
  9. typedef struct Node NODE;
  10.  
  11. struct List{
  12.         struct Node *pHead;//con trỏ đầu 
  13.         struct Node *pTail;// con trỏ cuối
  14. };
  15. typedef struct List LIST;
  16.  
  17. // khởi tạo
  18. void Init(List &l){
  19.         l.pHead = l.pTail =NULL;//khởi tạo danh sách rỗng
  20. }
  21.  
  22. // Tạo NODE
  23. NODE* getNode(int x){
  24.         // x là dữ liệu đưa vào Data.
  25.         NODE *p;
  26.         //Cấp phát bộ nhớ cho NODE
  27.         p = (NODE *)malloc(sizeof(NODE));
  28.         if(== NULL){
  29.                 return NULL;
  30.         }
  31.         p->Data = x;// Lưu x vào Data
  32.         p->pNext = NULL;//khởi tạo mối liên kết;
  33.         return p;
  34. }
  35. // Thêm Node
  36. void addHead(LIST &l, NODE *p){             // Thêm vào đầu danh sách
  37.         if(l.pHead==NULL){              // Danh sách rỗng
  38.                                         // Phần tử p thêm vào cũng chính là đầu cũng là cuối
  39.                 l.pHead = l.pTail = p;
  40.         }else{
  41.                 p->pNext = l.pHead;// Bắt đầu gán 
  42.                 l.pHead = p;
  43.         }
  44. }
  45. // Nhập dữ liệu
  46. void InPut(LIST &l){
  47.         int n;
  48.         printf("\nBan muon nhap bao nhieu NODE");
  49.         scanf("%d",&n);
  50.         Init(l);
  51.         int i = 1;
  52.         for(i; i <= n; i++){
  53.                 int x;
  54.                 printf("\nNhap du lieu:");
  55.                 scanf("%d",&x);
  56.                
  57.                 NODE *= getNode(x);// Đưa dữ liệu vào Node
  58.                 addHead(l,p);        // Thêm p vào đầu danh sách
  59.         }
  60. }
  61. // Xuất danh sách
  62. void OutPut(LIST &l){
  63.         NODE *= l.pHead;
  64.         if(l.pHead == NULL) return;
  65.         while(!= NULL){
  66.                 printf("%d\t",p->Data);
  67.                 p = p->pNext;
  68.         }
  69. }
  70. //Đổi chỗ
  71. void hoanVi(int &a, int &b){
  72.         int temp = a;
  73.         a = b;
  74.         b = temp;
  75. }
  76. //Sắp xếp
  77. void sort(LIST &l){
  78.         NODE *= l.pHead;
  79.         NODE *= p->pNext;
  80.        
  81.         for(= l.pHead; p != l.pTail; p = p->pNext){           // p trỏ vào phần tử đầu danh sách,p chạy đến phần tử cuối danh sách
  82.                 for(= p->pNext; q != NULL; q= q->pNext){       // q trỏ vào phần tử tiếp theo , q chạy đến null.
  83.                         if(p->Data < q->Data){                        // sắp xếp giảm dần
  84.                                 hoanVi(p->Data, q->Data);
  85.                         }
  86.                 }
  87.         }
  88. }
  89. int main(){
  90.         LIST l;
  91.         InPut(l);
  92.         printf("DS: \n");
  93.         OutPut(l);
  94.         sort(l);
  95.         printf("\nDS sau xap xep:\n");
  96.         OutPut(l);
  97.         getch();
  98.         return 0;
  99. }
  100.  

Editor

You can edit this paste and save as new:


File Description
  • 5
  • Paste Code
  • 27 Feb-2021
  • 2.12 Kb
You can Share it: