30/09/2018, 21:26

Hỏi về danh sách liên kết đơn trong C++

Trên mặt lý thuyết thì mình đã hiểu về cách hoạt động của danh sách liên kết đơn.
Nhưng tới khi viết code thì mình lại không biết cách nhập xuất như thế nào cả.
cần nhập xuất về danh sách liên kết đơn thì mình cần mấy bước vậy mấy bạn.
1.khai báo Node
2.khởi tạo dữ liệu
3…
Mong các bạn giúp mình với!!

Phạm Ngọc Hiếu viết 23:33 ngày 30/09/2018

Một chương trình cơ bản này c:

#include <stdio.h>
#include <conio.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 = new NODE;
	if(p == NULL)
	{
		return NULL;
	}
	p->Data = x;
	p->pNext = NULL;
	return p;
}

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

void InPut(LIST &l,int n)
{
	Init(l); 
	for(int i = 1; i <= n; i++)
	{
		int x;
		printf("\nNhap vào data: ");
		scanf("%d", &x);
		
		NODE *p = GetNODE(x); 
		AddHead(l, p);
	}
}

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

int main()
{
	LIST l;
	int n;
	printf("\nBan muốn nhập bao nhiêu Node: ");
	scanf("%d", &n);
	InPut(l,n);
	OutPut(l);
}
tuong lam viết 23:40 ngày 30/09/2018

Mình vẫn chưa hiểu chổ này bạn có thể giải thích cho mình được không!

NODE* GetNODE(int x) 
{
	NODE *p = new NODE;
	if(p == NULL)
	{
		return NULL;
	}
	p->Data = x;
	p->pNext = NULL;
	return p;
}
Phạm Ngọc Hiếu viết 23:31 ngày 30/09/2018
NODE* GetNODE(int x) 
{
	NODE *p = new NODE; // cấp phát bộ nhớ cho con trỏ p
	if(p == NULL) // ko cấp phát được bộ nhớ cho con trỏ p
	{
		return NULL;
	}
	p->Data = x; // Data = x
	p->pNext = NULL; // con trỏ pNext = NULL
	return p;
}
jndvpr2202 viết 23:29 ngày 30/09/2018

Lên youtube search Paul Programming , ông này dạy dễ hiểu lắm,có vừa code vừa giảng hẳn 1 bài linked list

Vũ Đức Thắng viết 23:29 ngày 30/09/2018

cho em hoi
struct List
{
NODE *pHead;
NODE *pTail;
};
em lên có cách hiểu nó là cái gì là chính xác nhất, là 1 LinkList bên trong có 2 con trỏ trỏ từ đầu phần tử -> cuối phần tử ạ

rogp10 viết 23:34 ngày 30/09/2018

Một trỏ vào đầu, một trỏ vào đuôi của cùng một con… con gì bây h nhỉ.

Trần Hoàn viết 23:35 ngày 30/09/2018

Danh sách liên kết đôi, mỗi node trỏ đến 2 node. 2 đầu danh sách trong trường hợp thông thường là NULL, trong trường hợp vòng thì trỏ đến node khác trong danh sách.

Vũ Đức Thắng viết 23:27 ngày 30/09/2018

anh ơi, em tưởng đó là dánh sách liên kết đơn ạ,

rogp10 viết 23:30 ngày 30/09/2018

Phải xem NODE gồm thành phần nào nữa.

Moc Thanh viết 23:29 ngày 30/09/2018

không biết mình sai ở đâu mà chạy không được

#include<iostream>
using namespace std;

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 = new NODE;
	if (p == NULL) {
		return p;
	}
	p->data = x;
	p->pnext = NULL;
	return p;
}
void addhead(LIST &l, NODE *p) {
	if (l.phead = NULL) {
		l.phead = l.ptail = p;
	}else{
	p->pnext = l.phead;
	l.phead = p;  }
}
void input(LIST &l, int n) {
	init(l);
	for (int i = 1; i <= n; i++) {
		int x;
		cout << " nhap : ";
		cin >> x;
		NODE *p = getnode(x);
		addhead(l, p);
	}
}

void output(LIST &l) {
	for (NODE *p = l.phead; p != NULL; p = p->pnext) {
		cout << p->data;
	}
}

int main() {
	LIST(l);
	int n;
	cout << " nhap ds ";
	cin >> n;
	input(l, n);
	output(l);
	system("pause");
}
Doan Phan Anh Khoa viết 23:41 ngày 30/09/2018

Hình như ở hàm output
Cout<data

Bài liên quan
0