30/09/2018, 21:54

Ai giúp e fix lỗi bài danh sách liên kết (ngôn ngữ C) này vs, e cảm ơn:

#include <conio.h>
#include <stdio.h>
#include <stdlib.h>

struct Node
{
    int Data;
    struct Node *pNext;
};
typedef struct Node NODE;

struct List
{
    NODE *pHead;
    NODE *pTail;
};
typedef struct List LIST;

void Init (LIST *l)
{
    (*l).pHead = (*l).pTail = NULL;
}

NODE* GetNode (int x)
{
    NODE *p = (NODE *)malloc(sizeof(NODE));

    p ->Data = x;
    p ->pNext = NULL;
}

void AddTail (LIST *l, NODE *p)
{
    if ((*l).pHead == NULL)
        (*l).pHead = (*l).pTail = p;

    (*l).pTail ->pNext = p;
    (*l).pTail = p;
}

void InPut (LIST *l)
{
    int n;

    printf ("Nhap vao so luong data: ");
    scanf ("%d", &n);

    Init(&l);

    int i, x;
    for (i = 0 ; i < n ; i++)
    {
        printf ("Nhap vao du lieu data: ");
        scanf ("%d", &x);

        NODE *p = GetNode(x);
        AddTail(&l, p);
    }
}

void OutPut (LIST l)
{
    NODE *p;
    for (p = l.pHead ; p != NULL ; p = p ->pNext)
        printf ("%5d", p ->Data);
}


int main()
{
    LIST l;

    InPut (&l);
    OutPut (l);

    getch();
    return 0;
}
Sơn viết 00:05 ngày 01/10/2018

Bọc code vao 2 dấu

nhé bạn

Nguyễn Hoàng Nhân viết 00:01 ngày 01/10/2018
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>

struct Node
{
    int Data;
    struct Node *pNext;
};
typedef struct Node NODE;

struct List
{
    NODE *pHead;
    NODE *pTail;
};
typedef struct List LIST;

void Init (LIST *l)
{
    (*l).pHead = (*l).pTail = NULL;
}

NODE* GetNode (int x)
{
    NODE *p = (NODE *)malloc(sizeof(NODE));

    p ->Data = x;
    p ->pNext = NULL;
}

void AddTail (LIST *l, NODE *p)
{
    if ((*l).pHead == NULL)
        (*l).pHead = (*l).pTail = p;

    (*l).pTail ->pNext = p;
    (*l).pTail = p;
}

void InPut (LIST *l)
{
    int n;

    printf ("Nhap vao so luong data: ");
    scanf ("%d", &n);

    Init(&l);

    int i, x;
    for (i = 0 ; i < n ; i++)
    {
        printf ("Nhap vao du lieu data: ");
        scanf ("%d", &x);

        NODE *p = GetNode(x);
        AddTail(&l, p);
    }
}

void OutPut (LIST l)
{
    NODE *p;
    for (p = l.pHead ; p != NULL ; p = p ->pNext)
        printf ("%5d", p ->Data);
}


int main()
{
    LIST l;

    InPut (&l);
    OutPut (l);

    getch();
    return 0;
}
Tao Không Ngu. viết 00:03 ngày 01/10/2018

This post was flagged by the community and is temporarily hidden.

Nguyễn Hoàng Nhân viết 00:07 ngày 01/10/2018

kh được a ơi…nó vẫn báo lỗi

Sơn viết 23:56 ngày 30/09/2018

Lỗi gì vậy bạn, bạn có thể kể chi tiết hơn được không?

Nguyễn Hoàng Nhân viết 23:56 ngày 30/09/2018

nó không có báo lỗi…khi e nhập dữ liệu data xong thì nó hiện ra bảng như dưới…e thử debug thì chạy tới dòng printf ("%5d", p ->Data); thì nó hiện lên cái bảng rồi kh debug được nữa

Nguyễn Hoàng Nhân viết 00:07 ngày 01/10/2018

nó có báo lỗi như hình dưới :

Tao Không Ngu. viết 00:10 ngày 01/10/2018

This post was flagged by the community and is temporarily hidden.

Nguyễn Hoàng Nhân viết 23:59 ngày 30/09/2018

full code đây bạn

#include <conio.h>
#include <stdio.h>
#include <stdlib.h>

struct Node
{
    int Data;
    struct Node *pNext;
};
typedef struct Node NODE;

struct List
{
    NODE *pHead;
    NODE *pTail;
};
typedef struct List LIST;

//---------------------------------------------------

void Init (LIST *l)
{
    (*l).pHead = (*l).pTail = NULL;
}

//----------------------------------------------------

NODE* GetNode (int x)
{
    NODE *p = (NODE *)malloc(sizeof(NODE));

    if (p == NULL)
        return NULL;

    p ->Data = x;
    p ->pNext = NULL;
    return p;
}

//-----------------------------------------------------

void AddTail (LIST *l, NODE *p)
{
    if ((*l).pHead == NULL)
    {
        (*l).pHead = (*l).pTail = p;
    }
    else
    {
        (*l).pTail ->pNext = p;
        (*l).pTail = p;
    }
}

//--------------------------------------------------

void InPut (LIST *l)
{
    int n;

    printf ("Nhap vao so luong data: ");
    scanf ("%d", &n);

    Init(&l);

    int i, x;
    for (i = 0 ; i < n ; i++)
    {
        printf ("Nhap vao du lieu data: ");
        scanf ("%d", &x);

        NODE *p = GetNode(x);
        AddTail(&l, p);
    }
}

//---------------------------------------------------------

void OutPut (LIST l)
{
    NODE *p;
    for (p = l.pHead ; p != NULL ; p = p ->pNext)
        printf ("%5d", p ->Data);

    free(p);
}

//--------------------------------------------------------

int main()
{
    LIST l;

    InPut (&l);
    OutPut (l);

    getch();
    return 0;
}
Sơn viết 23:56 ngày 30/09/2018

chỗ

void InPut (LIST *l)

bạn đã truyền vào con trỏ *lít rồi thì khi khởi tạo bạn chỉ cần gọi

Init(l);

thôi
nếu bạn gọi như trên thì nó sẽ truyền dịa chỉ của con trỏ tới list vào hàm Intit() đó

chỗ

AddTail(&l, p);

trong hàm Input() chỉ cần truyền biến l vào hàm AddTail() thôi

những chỗ như

(*l).pHead == NULL

bạn có thể viết thành

l->pHead==NULL;
Nguyễn Hoàng Nhân viết 23:57 ngày 30/09/2018

Ok hiểu rồi…e cảm ơn

Bài liên quan
0