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

Đề tài: mat gia tri khi thay doi thu tu goi ham...

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

    Mặc định mat gia tri khi thay doi thu tu goi ham...

    InsertBottom(&plist,x); x++;//(1)
    InsertTop(&plist,x); // (2) khi nhu the nay thi khi goi ham gia tri hien thi la 9 8
    //con khi doi cho (2) cho (1) thi gia tri hien ra tren man hin h chi la 9 thui....? minh khog hieu....... moi nguoi giai thich zum nha......bai nay minh lay tu mot bai tren dien dan mang ve nghien cuu

    Code:
     #include<iostream.h>
      #include<conio.h>
    #include <stdio.h>
    #include <stdlib.h>
    /*
    */
    typedef struct Number
    {
        int number;
        struct Number *next;
    } *NODE;
    
    /**All Function**/
    void Init(NODE *plist) {*plist = NULL;}
    
    int Empty(NODE plist)
    {
        if (plist == NULL) return 1;
        return 0;
    }
    
    void InsertTop(NODE *plist, int x)
    {
        NODE p = (NODE) malloc (sizeof(struct Number));
        p->number = x;
        p->next = NULL;
        if (Empty(*plist)) *plist = p;
        else
        {
            p->next = *plist;
            *plist = p;
        }
    }
    
    void InsertBottom(NODE *plist, int x)
    {
        NODE p = (NODE) malloc (sizeof(struct Number));
        p->number = x;
        p->next = NULL;
        if (Empty(*plist)) *plist = p;
        else
        {
            NODE q = *plist;
            while (q != NULL) q = q->next;
            q = p;
        }
    }
    
    void InsertPos(NODE *plist, NODE pos, int x)
    {
        NODE p = (NODE) malloc (sizeof(struct Number));
        p->number = x;
        p->next = pos->next;
        pos->next = p;
    }
    
    void DeleteTop(NODE *plist, int *x)
    {
        if (!Empty(*plist))
        {
            NODE p = *plist;
            *plist = (*plist)->next;
            *x = p->number;
            free(p);
        }
    }// day la ham lay va xoa va giai phong bo nho
    
    void DeleteBottom(NODE *plist, int *x)
    {
        if (!Empty(*plist))
        {
            NODE p = *plist, q;
            while (p->next != NULL)
            {
                q = p;
                p = p->next;
            }
            *x = p->number;
            free(p);
            q->next = NULL;
        }
    }
    
    void DeletePos(NODE *plist, NODE pos, int *x)
    {
        NODE p = *plist;
        while (p->next != pos) p = p->next;
        p->next = pos->next;
        *x = pos->number;
        free(pos);
    }
    
    void DeleteALL(NODE *plist)
    {
        NODE p;
        while (!Empty(*plist))
        {
            p = *plist;
            *plist = (*plist)->next;
            free(p);
        }
    }
    
    void Display(NODE plist)
    {
        NODE p = plist;
        while (p != NULL)
        {
            printf("%6d",p->number);
            p = p->next;
        }
    }
    int main()
    {
        NODE plist;
        Init(&plist);
        int x=8;
    
        InsertBottom(&plist,x);  x++;//(1)
        InsertTop(&plist,x);    // (2) khi nhu the nay thi khi goi ham gia tri hien thi la 9 8
                                                                                                                        //con khi  doi cho (2) cho (1) thi gia tri hien ra tren man hin h chi la 9 thui....? minh khog hieu....... moi nguoi giai thich zum nha......bai nay minh lay tu mot bai tren dien dan mang ve nghien cuu
        
        Display(plist);
        getch();
        return 0;
    }

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

    khong ai giai dap gium y kien cua minh ak...........?

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

    Trích dẫn Nguyên bản được gửi bởi dungc13 Xem bài viết
    khong ai giai dap gium y kien cua minh ak...........?
    Sai là phải. Bạn xem nè.
    Ban đầu, bạn có x = 8. Thực hiện. TH1 :
    Code:
    InsertBottom(&plist,x);  
    x++;
    InsertTop(&plist,x);
    Chạy.
    Code:
    void InsertBottom(NODE *plist, int x)
    {
        NODE p = (NODE) malloc (sizeof(struct Number));
        p->number = x;
        p->next = NULL;
        if (Empty(*plist)) *plist = p;
        else
        {
            NODE q = *plist;
            while (q != NULL) q = q->next;
            q = p;
        }
    }
    Lệnh if(Empty(*plist)) sẽ được thực hiên (vì con trỏ plist ban đầu rỗng) sau đó thực hiên *plist = p;
    Con trỏ plist trỏ đến 8.
    Thực hiện x ++ => x = 9. Sau đó là hàm InsertTop(&plist,x) được thực hiên.
    Code:
    void InsertTop(NODE *plist, int x)
    {
        NODE p = (NODE) malloc (sizeof(struct Number));
        p->number = x;
        p->next = NULL;
        if (Empty(*plist)) *plist = p;
        else
        {
            p->next = *plist;
            *plist = p;
        }
    }
    Bỏ qua lệnh if (plist đã trỏ đến 8), thực hiện else, con trỏ next của 9 trỏ đến vùng địa chỉ của 8. 9 -> 8, plist trỏ lên 9.
    TH2 : x = 8
    Code:
    InsertTop(&plist,x);
    x ++;
    InsertBottom(&plist,x);
    Code:
    void InsertTop(NODE *plist, int x)
    {
        NODE p = (NODE) malloc (sizeof(struct Number));
        p->number = x;
        p->next = NULL;
        if (Empty(*plist)) *plist = p;
        else
        {
            p->next = *plist;
            *plist = p;
        }
    }
    Tương tự TH1, con trỏ plist trỏ đến 8.
    Tương tự x ++; => x = 9;
    Code:
    void InsertBottom(NODE *plist, int x)
    {
        NODE p = (NODE) malloc (sizeof(struct Number));
        p->number = x;
        p->next = NULL;
        if (Empty(*plist)) *plist = p;
        else
        {
            NODE q = *plist;
            while (q != NULL) q = q->next;
            q = p;
        }
    }
    Tương tự, bỏ qua if, thực hiên else.
    Chạy hết vòng lặp while, q = NULL, sau đó gán q = p. <-- Sai
    Ở đây, con trỏ next của phần tử cuối ds (ở đây là 8, nó vừa là phần tử đầu, vừa là phần tử cuối ds) chưa trỏ đến địa chỉ của p nên khi thực hiện Display(plist); không cho ra 9.
    Hàm InsertBottom() này bạn sửa lại là
    Code:
    void InsertBottom(NODE *plist, int x)
    {
        NODE p = (NODE) malloc (sizeof(struct Number));
        p->number = x;
        p->next = NULL;
        if (Empty(*plist)) *plist = p;
        else
        {
            NODE q = *plist;
            while (q->next != NULL) q = q->next;
            q->next = p;
        }
    }
    Đã được chỉnh sửa lần cuối bởi pato24193 : 09-01-2013 lúc 03:36 PM.

  4. #4
    Ngày gia nhập
    04 2012
    Bài viết
    23

    thank bạn nhìu.... ? mình thấy mình còn kém quá.....? bạn thật giỏi

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

  1. Kỹ thuật C++ Cách thay đổi 1 giá trị bất kỳ trong tập tin nhị phân, mà không làm thay đổi các phần tử còn lại???
    Gửi bởi bratlove123 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 8
    Bài viết cuối: 11-05-2012, 02:55 PM
  2. Trả lời: 3
    Bài viết cuối: 08-08-2011, 02:26 PM
  3. Lỗi Visual Studio 2008 | Không thay đổi chương trình khi thay đổi code
    Gửi bởi matseo trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 3
    Bài viết cuối: 20-12-2010, 10:51 PM
  4. Thay đổi màu của cell bị thay đổi trong Data Grid Views
    Gửi bởi tetuonggu trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 6
    Bài viết cuối: 16-10-2009, 10:33 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