Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 3 của 3
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Xây dựng Danh sách đặc (Cấu trúc dữ liệu) ?

    Các pác xem giúp em chương trình sai chỗ nào mà dẫn đến hiện kết quả ko chính xác nhé. Em đang giải bài này:
    "Vận dụng các phép toán trên danh sách đặc để viết chương trình nhập vào một danh sách các số
    nguyên và hiển thị danh sách vừa nhập ra màn hình. Thêm 1 phần tử có nội dung x vào danh sách tại
    vị trí p (trong đó x và p được nhập từ bàn phím). Xóa phần tử đầu tiên có nội dung x (nhập từ bàn
    phím) ra khỏi danh sách."

    Mã nguồn PHP:
    #include<iostream> #define maxlength 20 using namespace std; typedef int position; typedef int elementtype; typedef struct list { elementtype elements[20]; position last; }; elementtype RETRIEVE(position P,list L) { return L.elements[P-1]; } void MAKENULL_LIST(list &L) { L.last=0; } int ENDLIST(list L) { return L.last+1; } int FIRST(list L) { return 1; } void INSERT_LIST(elementtype X, position P, list &L) { position i; if(P>ENDLIST(L) || P<FIRST(L)) cout<<"Vi tri khong hop le!"; else if(L.last==maxlength) cout<<"Danh sach day!"; else { for(i=L.last;i>=P+1;i--) L.elements[i]=L.elements[i-1]; L.elements[P]=X; L.last++; } } void READ_LIST(list &L) { position p=1; elementtype q; cout<<"Nhap phan tu (ket thuc bang -1):
    "
    ; do { cout<<"X"<<p<<"= ";cin>>q; INSERT_LIST(q,p,L); p++; } while(q!=-1); } position LOCATE(elementtype X, list L) { for (position i=FIRST(L);i<L.last;i++) if(RETRIEVE(i,L)==X) return i; } void DELETE_LIST(position P, list &L) { position q; for(q=P+1;q<=L.last;q++) L.elements[q-2]=L.elements[q-1]; L.last--; } void PRINT_LIST(list L) { position q; for(q=FIRST(L);q<=L.last;q++) cout<<RETRIEVE(q,L)<<" "; cout<<"
    "
    ; } int main() { list L; position P; elementtype X; MAKENULL_LIST(L); READ_LIST(L); cout<<"Danh sach vua nhap:
    "
    ; PRINT_LIST(L); cout<<"
    Nhap phan tu va vi tri can them: "
    ; cin>>X>>P; INSERT_LIST(X,P,L); cout<<"Danh sach sau khi them:
    "
    ; PRINT_LIST(L); cout<<"
    Nhap phan tu muon xoa: "
    ; cin>>X; DELETE_LIST(LOCATE(X,L),L); cout<<"Danh sach sau khi xoa "<<X<<" :
    "
    ; PRINT_LIST(L); return 0; }  

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    <div class="bbcode_description">HTML Code:
    void PRINT_LIST(list L)
    {
    position q;
    for(q=FIRST(L);q<=L.last;q++)
    cout<<RETRIEVE(q,L)<<" ";
    cout<<"
    ";
    }
    </div>Lỗi ở trong hàm Print_List của bạn đó.Nếu theo như code của bạn thì hàm RETRIVE sẽ trả về giá trị đầu tiên là L.elements[0] là phần tử mà bạn chưa khởi gán. Ở trong vòng lặp for bạn thay q=FIRST(L) thành FIRST(L)+1 được thành như thế này

    <div class="bbcode_description">HTML Code:
    void PRINT_LIST(list L)
    {
    position q;
    for(q=FIRST(L)+1;q<=L.last;q++)
    cout<<RETRIEVE(q,L)<<" ";
    cout<<"
    ";
    }
    </div>Sau khi sửa như thế này dữ liệu xuất sau khi nhập được in đúng, các thao tác còn lại ok, đã test!

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    @mp121209: nói chính xác hơn là mình sai từ chỗ READ_LIST. Thanks bạn đã "khai sáng" cho mình [IMG]images/smilies/biggrin.png[/IMG]

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •