Từ 1 tới 4 trên tổng số 4 kết quả

Đề tài: Áp dụng cây tìm kiếm nhị phân để liệt kê thông tin người dùng

  1. #1
    Ngày gia nhập
    11 2011
    Bài viết
    2

    Angry Áp dụng cây tìm kiếm nhị phân để liệt kê thông tin người dùng

    Mình có 1 bài toán yêu cầu thế này :


    1: nhập danh sách nhân viên bao gồm các thông tin sau : tên,tuổi và địa chỉ

    2: sắp xếp theo thứ tự tuổi tăng dần

    3: xây dựng cây tìm kiếm nhị phân để khi nhập số tuổi bất kì vào nếu có thì có thể hiện lên thông tin của người đó.

    Mình mới bắt đầu nên còn rất gà nhiều thứ. Mình mới làm được 2 yêu cầu đầu, còn yêu cầu thứ 3 mình chưa làm đc.
    Mong các bạn giúp đỡ mình :X:X:X

  2. #2
    Ngày gia nhập
    01 2011
    Nơi ở
    -Mountain-
    Bài viết
    768

    Trích dẫn Nguyên bản được gửi bởi namnh52d Xem bài viết
    Mình có 1 bài toán yêu cầu thế này :
    1: nhập danh sách nhân viên bao gồm các thông tin sau : tên,tuổi và địa chỉ
    2: sắp xếp theo thứ tự tuổi tăng dần
    3: xây dựng cây tìm kiếm nhị phân để khi nhập số tuổi bất kì vào nếu có thì có thể hiện lên thông tin của người đó.
    Mình mới bắt đầu nên còn rất gà nhiều thứ. Mình mới làm được 2 yêu cầu đầu, còn yêu cầu thứ 3 mình chưa làm đc.
    Mong các bạn giúp đỡ mình :X:X:X
    Công việc của bạn là tạo:
    - Node thông tin nhân viên <NodeInfor>: Bao gồm tên, tuổi, địa chỉ
    - Node của cây nhị phân <Node>: Bao gồm NodeInfor, Node left, Node right;
    - Xây dựng cây nhị phân thông qua hàm insertNode: Cái này dùng đệ quy khá đơn giản. Nếu root == NULL thì cái này chính là gốc luôn. Còn nếu không thì so sánh ----> gán gốc là con trái hoặc con phải tùy theo giá trị của Key.
    -----> Công việc còn lại nữa là tìm kiếm chắc không vấn đề
    Hướng dẫn C++: https://www.youtube.com/watch?v=BwLodoQdoY4&list=PL1c9Uxlo-mplJDRGdONNupgo5OCBTyGGn

  3. #3
    Ngày gia nhập
    11 2011
    Bài viết
    2

    Trích dẫn Nguyên bản được gửi bởi beautifulsoul84hung Xem bài viết
    Công việc của bạn là tạo:
    - Node thông tin nhân viên <NodeInfor>: Bao gồm tên, tuổi, địa chỉ
    - Node của cây nhị phân <Node>: Bao gồm NodeInfor, Node left, Node right;
    - Xây dựng cây nhị phân thông qua hàm insertNode: Cái này dùng đệ quy khá đơn giản. Nếu root == NULL thì cái này chính là gốc luôn. Còn nếu không thì so sánh ----> gán gốc là con trái hoặc con phải tùy theo giá trị của Key.
    -----> Công việc còn lại nữa là tìm kiếm chắc không vấn đề
    Mình mới viết được 2/3 bài toán. Mình làm thế này bạn xem hộ mình như thế được chưa nhé. Yêu cầu thứ 3 thật sự mình chưa viết được, bạn có thể triển khai giúp mình được không.
    Đây là code mình viết :

    C++ Code:
    1. #include<iostream>
    2. #include<conio.h>
    3. #include <string>
    4.  
    5. using namespace std;
    6.        
    7. int main()
    8. {
    9.     struct nhanvien
    10.     {
    11.        char hoten[30];
    12.        int tuoi;
    13.        char diachi[30];
    14.        nhanvien *left;
    15.        nhanvien *right;
    16.        }so [30],*root;
    17.     int i,n;
    18.     cout<<"nhap vao so nhan vien n= ";
    19.     cin>>n;
    20.     fflush(stdin);
    21.     for(i=0;i<n;i++)
    22.     {
    23.                      cout<<"nhan vien thu: "<<i<<endl;
    24.                      cout<<"hoten: ";
    25.                      cin.getline(so[i].hoten,30);
    26.                      //cout<<endl;
    27.                      cout<<"dia chi: ";
    28.                      cin.getline(so[i].diachi,30);
    29.                      cout<<"tuoi: ";
    30.                      cin>>so[i].tuoi;
    31.                      
    32.                      cin.ignore();
    33.                      fflush(stdin);
    34.                      
    35.                      //so[i]=x;
    36.     }
    37.     cout<<"\n \n in ra ket qua : \n";
    38.     for(i=0;i<n;i++)
    39.     {
    40.                      cout<<so[i].hoten<<"  "<<so[i].diachi<<"  "<<so[i].tuoi<<"  "<<endl;
    41.                      }
    42.      
    43.      
    44.      //sap xep theo chieu tang dan cua tuoi                
    45.     int j;
    46.     for(i=0;i<n;i++)
    47.     {
    48.                     for(j=i+1;j<n;j++)
    49.                     {
    50.                                       if(so[i].tuoi<so[j].tuoi)
    51.                                       {
    52.                                                                int temp=so[i].tuoi;
    53.                                                                so[i].tuoi=so[j].tuoi;
    54.                                                                so[j].tuoi=temp;
    55.                                       }
    56.                     }
    57.      }
    58.      
    59.      cout<<"\n \n ten xep theo tuoi la : \n";
    60.      for(i=0;i<n;i++)
    61.      {
    62.                      cout<<so[i].hoten<<"  "<<so[i].diachi<<"  "<<so[i].tuoi<<"  "<<endl;
    63.                      }
    64.                      
    65.      
    66.     //tim kiem nhi phan
    67.    
    68.     system("pause");
    69. }

    Cảm ơn bạn rất nhiều
    Đã được chỉnh sửa lần cuối bởi beautifulsoul84hung : 21-11-2011 lúc 07:08 PM.

  4. #4
    Ngày gia nhập
    01 2011
    Nơi ở
    -Mountain-
    Bài viết
    768

    Mình share đoạn code thao tác với số nguyên. còn áp dụng ra sao thì chắc bạn cũng biết cách áp dụng
    Chứ mình ngồi ráp thì lười lắm
    - File đính kèm mình đính ở dưới
    C++ Code:
    1.  
    2. // copyright: beautifulsoul84hung
    3.  
    4. #include <iostream>
    5. #include <fstream>
    6. #include <assert.h>
    7.  
    8.  
    9. using namespace std;
    10. typedef class node* Node;
    11. class node
    12. {
    13.     private:
    14.         int data;
    15.         node *left;
    16.         node *right;
    17.     public:
    18.         node (int data, Node left, Node right)
    19.         {
    20.             this->data = data;
    21.             this->left = left;
    22.             this->right = right;
    23.         }
    24.  
    25.         void setData (int data)
    26.         {
    27.             this->data = data;
    28.         }
    29.         int getData () const
    30.         {
    31.             return data;
    32.         }
    33.  
    34.         void setLeft (Node left)
    35.         {
    36.             this->left = left;
    37.         }
    38.  
    39.         Node getLeft () const
    40.         {
    41.             return left;
    42.         }
    43.  
    44.         void setRight (Node right)
    45.         {
    46.             this->right = right;
    47.         }
    48.  
    49.         Node getRight () const
    50.         {
    51.             return right;
    52.         }
    53.  
    54.         void print ()
    55.         {
    56.             cout << getData () << " ";
    57.         }
    58.  
    59.         friend class binarySearchTree;
    60. };
    61.  
    62. typedef class binarySearchTree* BinarySearchTree;
    63. class binarySearchTree
    64. {
    65.     private:
    66.         Node root;
    67.     public:
    68.         void setRoot (Node root)
    69.         {
    70.             this->root = root;
    71.         }
    72.  
    73.         Node getRoot () const
    74.         {
    75.             return root;
    76.         }
    77.  
    78.         binarySearchTree (Node root)
    79.         {
    80.             this->root = root;
    81.         }
    82.         binarySearchTree ()
    83.         {
    84.             root = NULL;
    85.         }
    86.  
    87.  
    88.         void creatBSTree (const char* filename)
    89.         {
    90.  
    91.             int data;
    92.             Node tmp;
    93.             fstream _in (filename, ios::in);
    94.             while (!_in.eof ())
    95.             {
    96.                 _in >> data;
    97.                 tmp = new node (data, NULL, NULL);
    98.                 insert(tmp);
    99.             }
    100.         }
    101.  
    102.         void insert (Node tmp)
    103.         {
    104.             if (getRoot() == NULL)
    105.                 setRoot(tmp);
    106.             else
    107.             {
    108.  
    109.                 Node bsh = getRoot();
    110.                 if (bsh->getData() > tmp->getData())
    111.                     if (bsh->getLeft () == NULL)
    112.                         bsh->setLeft(tmp);
    113.                     else
    114.                     {
    115.                         BinarySearchTree newTree = new binarySearchTree (bsh->getLeft());
    116.                         newTree->insert (tmp);
    117.                     }
    118.                 else
    119.                 {
    120.                     if (bsh->getRight() == NULL)
    121.                         bsh->setRight(tmp);
    122.                     else
    123.                     {
    124.                         BinarySearchTree newTree = new binarySearchTree (bsh->getRight());
    125.                         newTree->insert (tmp);
    126.                     }
    127.                 }
    128.  
    129.             }
    130.         }
    131.         void printPost ()
    132.         {
    133.             if (getRoot() != NULL)
    134.             {
    135.  
    136.                 BinarySearchTree tmp = new binarySearchTree (getRoot()->getLeft());
    137.                 tmp->printPost ();
    138.                 tmp = new binarySearchTree (getRoot()->getRight());
    139.                 tmp->printPost ();
    140.                 getRoot()->print ();
    141.             }
    142.         }
    143.  
    144.         bool SearchBT (int value)
    145.         {
    146.             Node tmp = new node (value, NULL, NULL);
    147.             Node bsh = getRoot();
    148.             if (getRoot() == NULL)
    149.                 return false;
    150.             if (getRoot()->getData() == value)
    151.                 return true;
    152.             else
    153.             {
    154.                 if (getRoot()->getData() > value)
    155.                 {
    156.                     BinarySearchTree newTree = new binarySearchTree (getRoot()->getLeft());
    157.                     newTree->SearchBT (value);
    158.                 }
    159.                 else
    160.                 {
    161.                     BinarySearchTree newTree = new binarySearchTree (getRoot()->getRight());
    162.                     newTree->SearchBT (value);
    163.                 }
    164.  
    165.             }
    166.  
    167.         }
    168.  
    169.         // -- .......
    170.         // -- .......
    171. };
    172.  
    173. int main ()
    174. {
    175.  
    176.     BinarySearchTree tree = new binarySearchTree ();
    177.     tree->creatBSTree("hung.txt");
    178.     tree->printPost ();
    179.     return 0;
    180. }
    Attached Files Attached Files
    Hướng dẫn C++: https://www.youtube.com/watch?v=BwLodoQdoY4&list=PL1c9Uxlo-mplJDRGdONNupgo5OCBTyGGn

Các đề tài tương tự

  1. dùng cây nhị phân tìm kiếm để lưu trữ
    Gửi bởi trungdv007 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 6
    Bài viết cuối: 04-11-2011, 12:47 AM
  2. Lỗi dùng tìm kiếm tuần tự để tìm kiếm sinh viên theo tên
    Gửi bởi mrbuides trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 7
    Bài viết cuối: 19-05-2011, 07:34 PM
  3. Lập thuật toán tìm kiếm (Dùng đệ quy)
    Gửi bởi seit trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 04-03-2011, 02:47 PM
  4. cho hỏi về thuật toán UCS dùng để tìm kiếm đường đi?
    Gửi bởi vuit trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 0
    Bài viết cuối: 11-04-2010, 01:37 PM
  5. Tìm kiếm trên file! Tìm kiếm xâu mẫu dùng giải thuật Naive | Giúp mình code sai ở đâu
    Gửi bởi totoise trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 19-04-2009, 08:22 PM

Tags của đề tài này

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn