01/10/2018, 00:29
Lỗi k thêm được phần tử vào danh sách liên kết đơn
Ai giúp em chỉ chỗ sai bài này với ạ. Nó bị lỗi run-time và em k thể phát hiện ra chỗ nào bất hợp lí cả.
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct node
{
char DATA[30];
struct node *n;
};
struct node* Freenode (struct node* p)
{
free(p);
}
int Emptynode(struct node* plist)
{
if(plist==NULL) return 1;
return 0;
}
struct node* AddHead(struct node *plist, char x[30])
{
struct node *p;
p=(struct node*)malloc(sizeof(struct node));
strcpy(p->DATA,x);
if(plist==NULL)
{
plist=p;
p->n=NULL;
return p;
}
else
{
p->n=plist;
plist=p;
return p;
}
}
struct node *AddTail(struct node* plist, char x[30])
{
struct node *p, *q;
if(plist==NULL)
{
AddHead(plist,x);
return (plist);
}
else
{
p=plist;
q=(struct node*)malloc(sizeof(struct node));
strcpy(q->DATA, x);
while(p->n!=NULL) p=p->n;
p->n=q;
q->n=NULL;
return q;
}
}
void xuat(struct node* plist)
{
if (plist)
{
printf("
Danh sach cac phan tu cua:
");
struct node *p;
p=plist;
do
{
printf("%s",p->DATA);
p=p->n;
}
while(p->n!=NULL);
printf("
");
}
else printf("
Danh sach rong");
}
int main()
{
struct node *plist;
plist=(struct node*)malloc(sizeof(struct node));
AddHead(plist,"anh");
xuat(plist);
}
Bài liên quan
chỗ vòng lặp while kìa bạn
Bạn nói rõ hơn dk k?
đoạn này quá có vấn đề ấy chứ, bạn nhìn thấy chưa.
Sẽ thế nào nếu p=p->n; mà bị null ngay trong vòng do…while. Tại sao bạn lại check p->n 1 lần nữa khi mà bạn đã pull data của next p ra rồi. Cách sửa rất đơn giản.
hoặc an toàn hơn nữa là
Cám ơn bạn nhiều. Mình đang học nên lơ tơ mơ lắm. Cho mình hỏi thêm vấn đề khai báo ,khởi tạo danh sách và hàm thêm phần tử vào đầu danh sách có vấn đề j k bạn?
.
Hi bạn.
Mình là new member.
Code ban mình sơ qua khá bình thường nhưng vài chổ thấy chưa rõ.(Lâu rồi mình không dụng C/C++ nên cú pháp cụ thể không còn nhớ rõ lắm)
1 bắt đầu từ hàm main:
bạn cấp phát ngay 1 phần tử rổng đầu tiên cho plist. Chỉ nên làm thế này
2 AddHead
Tuy nhiên set trên tổng thể cấu trúc hàm thì nên sửa lại thế này
3 AddTail
Mình chỉ đóng góp chút ý kiến.