01/10/2018, 12:02

Giải đáp về liên kết đơn

#include "conio.h"
#include "stdio.h"

struct node
{
	int info;
	node *next;
};

struct list
{
	node dau;
	node cuoi;
};

void xuat(list l)
{
	for(node i=l.dau;i.next!=NULL;i=?)//-> nếu ko dùng con trỏ thì ko truy xuất đc đến phần tử kế tiếp
		printf("%d",i.info);
}

void tao_ds_node(list &l)
{
	(l.dau).info=(l.cuoi).info=NULL;
	(l.dau).next=(l.cuoi).next=NULL;
	

	int n;
	printf("nhap so node ");
	scanf("%d",&n);

	for(int i=0;i<n;i++)
	{
		node p;p.info=NULL;p.next=NULL;

		int x;
		printf("nhap x ");	scanf("%d",&x);

		if((l.dau).info==NULL)
			(l.dau).info=(l.cuoi).info=x;//gán thẳng x vào node đầu và cuối
		else if((l.dau).info==(l.cuoi).info&&i==1)
		{
			(l.dau).next=&p;
			p.info=x;
			l.cuoi=p;//mất tên định danh
		}
		else
		{
			(l.cuoi).next=&p;
			p.info=x;
			l.cuoi=p;//mất tên định danh
		}
	}
	xuat(l)
}
void main()
{
	int lc;
	do
	{
		printf("nhap lc ");
		scanf("%d",&lc);
		switch(lc)
		{
		case 1:
			{
				list l;
				tao_ds_node(l);
			}break;
		}
	}
	while(lc!=0);

}

như hình vẽ mình cho con trỏ là 1 biến trung gian/bài làm của mình là để thử nghiệm cho việc gán trực tiếp vào node mà ko cần phải thông qua con trỏ
thử nghiệm là để tại sao phải dùng con trỏ node *p mà ko phải dùng node p gán trực tiếp vào
sau khi thử nghiệm thì mình ra đc kết quả nhưng ko biết có đúng như mình nghĩ ko và cần giải đáp.
1 là sau khi nhập rồi gán trực tiếp xong thì khi mình cần truy xuất đến 1 node nào đó (hàm xuất) thì mình ko thể cho nó chạy từ đầu node đến cuối node đc ```i=? là kết luận của mình`` vậy đúng hay sai ? có phải đó là lí do liên kết đơn phải dùng con trỏ.
2 là có phải là do node p ko đc cấp phát vùng nhớ nên nó trùng địa chỉ >> ko tạo đc quá 3 phần tử

Bài liên quan
0