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

Đề tài: Hàm kiến tạo sao chép

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

    Mặc định Hàm kiến tạo sao chép

    Chào các bác, em có viết một danh sách liên kết bao gồm: 1 lớp Node dùng lưu trữ biến nguyên và con trỏ next đến phần tử kế tiếp, 1 lớp List có biến tĩnh size dùng để đếm số phần tử của DSLK và con trỏ head trỏ đến phần tử đầu tiên.

    Lớp Node

    C++ Code:
    1. class Node{
    2.    public:
    3.       int a;
    4.       Node* next;
    5.       Node();
    6.       ~Node();
    7. };

    Lớp List

    C++ Code:
    1. class List{
    2.    public:
    3.       static int size;
    4.       Node* head;
    5.       Node* tail;
    6.       List(){head = NULL; size = 0; tail = NULL;}
    7.       List(List& k);            // ham kien tao copy
    8.       ~List();
    9.       bool is_empty();
    10.       void print();
    11.       void push(int);
    12.       void append(int);         // them 1 phan tu vao cuoi danh sach
    13.       void remove(int);
    14. };

    Em muốn viết 1 hàm kiến tạo sao chép "sâu" tức là chép lại toàn bộ danh sách liên kết của 1 Object k (lớp List) thành 1 danh sách liên kết mới.
    Và đây là hàm kiến tạo sao chép của em.

    C++ Code:
    1. List::List(List& k){
    2.    if (k.is_empty()){                                         // Neu DSLK nguon rong
    3.       head = tail = NULL;
    4.       size = 0;
    5.    }
    6.  
    7.    else {
    8.       head = tail = k.head;                         // gan gia tri cua con tro dau va cuoi cua DSLK dich
    9.       Node* temp = new Node;                     // chay tu phan tu thu 2 den cuoi DSLK nguon
    10.       for(temp = k.head->next; temp != NULL; temp = temp->next){
    11.          append(temp->a);                               // lay gia tri cua tung phan tu de chen vao cuoi
    12.       }
    13.       delete temp;
    14.       temp = NULL;
    15.    }
    16.    size = k.size;
    17. }

    còn đây là hàm append, thêm 1 phần tử vào cuối DSLK

    C++ Code:
    1. void List::append(int t){
    2.    Node* e = new Node;                            // Node moi
    3.    e->a = t;
    4.    e->next = NULL;
    5.  
    6.    if(is_empty()){                                    // neu danh sach lien ket rong
    7.       head = tail = e;
    8.    }
    9.    else {
    10.       tail->next = e;                                // khong rong thi chi  viec gan them vao
    11.       tail = e;
    12.    }
    13. }

    Tuy nhiên khi chạy thì hàm thực tế tuy copy được nhưng lại dẫn đến treo máy. Bác nào có thể chỉ ra lỗi của em được không .
    Đã được chỉnh sửa lần cuối bởi phongdt : 22-11-2012 lúc 04:22 AM.

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

    Em đã tìm được lỗi rồi, mod xóa giùm em . Cảm ơn nhiều.
    Đã được chỉnh sửa lần cuối bởi phongdt : 22-11-2012 lúc 04:13 PM.

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

  1. [Kiếm Thế] Kiếm Thế Ngạo Thiên Kiếm Chạy Thử Nghiệm vào 10h ngày 15/09
    Gửi bởi c0jskull trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 5
    Bài viết cuối: 29-09-2013, 10:45 AM
  2. [Kiếm Thế] Kiếm Thế Kiếm Linh Chạy Thử Nghiệm vào 10h ngày 4/7
    Gửi bởi c0jskull trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 1
    Bài viết cuối: 05-07-2013, 12:16 PM
  3. [Kiếm Thế] Kiếm Thế Kiếm Linh Chạy Thử Nghiệm vào 10h ngày 4/7
    Gửi bởi c0jskull trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 03-07-2013, 10:30 PM

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