30/09/2018, 16:45

Lỗi Danh sách liên kết đơn trong c++

<#include<iostream>
using namespace std;

struct tree{
	int item;
	struct tree *next;
};
		tree *creat_tree(int );
		void insert_top(tree *,int);
		void show(tree *);
tree *creat_tree(int x){
	tree *p;
	p=new tree;
	p->item=x;
	p->next=NULL;
	return p;
}
void insert_top(tree *p,int x){
	tree *q;
	q=creat_tree(x);
	q->next=p;
	p=q;
	return;
}
void insert_bottom(tree *p,int x){
	tree *q,*r;
	q=creat_tree(x);
	r=p;
	while(r->next!=NULL){
		r=r->next;
	}
	r->next=q;
}
void show(tree *p){
	tree *q;
	q=new tree;
	q=p;
	while(q->next!=NULL){
	cout<<q->item;
	q=q->next;
	}
}
main(){
	tree *p;
	p=creat_tree(0);
	insert_top(p,1);
	insert_top(p,2);
	insert_bottom(p,3);
	show(p);
}
/>
Khai Nguyen Dinh viết 19:00 ngày 30/09/2018

lỗi là khi chèn thêm phần tử vào danh sách nhưng nó không xuất ra màn hình

BaoLe viết 18:51 ngày 30/09/2018

Mình code bằng C, bạn tham khảo thử.

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

typedef struct pNode
{
	int info;
	struct pNode* pNext;
}Node;

typedef struct list
{
	Node* pHead;
	Node* pTail;
}List;

void KhoiTaoDanhSach(List &l)
{
	l.pHead = NULL;
	l.pTail = NULL;
}

Node* GetNode(int x)
{
	Node* p;
	p = new Node;
	if (p==NULL)
	{
		printf("Khong tao duoc node");
		exit(1);
	}
	p->info = x;
	p->pNext = NULL;
	return p;
}
 
void Them(List &l, int x)
{
	Node* p = GetNode(x);
	//Them cuoi danh sach
	if (l.pHead==NULL)//danh sach rong
	{
		l.pHead = p;
		l.pTail = p;
	}
	else //danh sach co it nhat 1 phan tu
	{
		l.pTail->pNext = p;
		l.pTail = p;
	}
}

void XemDanhSach(List l)
{
	Node* p = l.pHead;
	while (p!=NULL)
	{
		printf("%d ", p->info);
		p=p->pNext;
	}
}

int main()
{ 
	List l;
	KhoiTaoDanhSach(l);
	Them(l, 10);
	Them(l, 20);
	Them(l, 30);
	XemDanhSach(l);
	return 0;
} 
Khai Nguyen Dinh viết 18:45 ngày 30/09/2018

mình đang dùng danh sách liên kết còn code của bạn dùng hàng đợi rồi

Nguyen Minh Tuan viết 18:46 ngày 30/09/2018

while(q->next!=NULL)

while(p!=NULL) - hàm show nhé

void insert_top(tree *p,int x){
tree *q;
q=creat_tree(x);
q->next=p;
p=q;
return;

không biết bạn có insert được không, nhưng mình nhớ là cái này không được. Cái p ở trong hàm insert_top khác vs p ở hàm main

Gió viết 18:58 ngày 30/09/2018
  • Hàm insert_top gán p=q thì p sẽ thay đổi nhưng ra khỏi hàm sẽ giữ nguyên. Sửa lại thành insert_top(tree * &p,int x)
  • Hàm show: q=new tree la không cần. Việc q->next==NULL vẫn có item nên sửa lại while(q->next!=NULL) thành while(q!=NULL)
    Code sửa lại : http://ideone.com/y5GIhJ
Khai Nguyen Dinh viết 18:52 ngày 30/09/2018

tại sao hàm insert_bottom không có cái (tree *&p,int x) ?

Gió viết 18:49 ngày 30/09/2018

tại sao hàm insert_bottom không có cái (tree *&p,int x) ?

Cả (tree *&p,int x)insert_bottom(tree *p,int x) đều dc. Vì p cũng không thay đổi

Nguyễn Hoàng Nhân viết 18:48 ngày 30/09/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;
}

giúp mình fix bài này với…chạy tới hàm output là bị lỗi

Bài liên quan
0