30/09/2018, 16:27

Danh sách liên kết?

Em đang học danh sách liên kết, nhưng lại không tìm được tài liệu hay video nào hướng dẫn rõ ràng, ai có thì cho em cái tài liệu về nó. Bài giảng của anh Đạt em xem mấy lần nhưng càng xem càng mơ hồ ko biết gì luôn …
Nếu anh chị nào rảnh code giúp em 1 bài gì đó, rồi giải thích rõ từng dòng trên đó thì cám ơn nhiều. Không thì em có 1 code này, nhưng lại không hiểu, anh chị giải thích giúp em từ đầu đến cuối luôn nhé.

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

struct sv
{
	char ten[20];
	char MSSV[10];
	int dtb;
};
struct NODE		
{
	sv info;		
	struct NODE* next;		
};
struct LIST		
{
	NODE *head;		
	NODE *tail;	
};

NODE* CreateNode (sv x)			
{
	NODE *p;	
	p=new NODE;	
	if(p==NULL)  exit(1);
	p->info=x;
	p->next=NULL;
	return p;
}
void CreateList (LIST &L)
{
	L.head=L.tail=NULL;
}
void input (sv &x)
{
	printf("
Nhap MSSV: ");  fflush(stdin); gets(x.MSSV);
	printf("
Nhap ten: ");  fflush(stdin); gets(x.ten);   
	printf("
Nhap dtb: "); scanf("%d", &x.dtb);
}
void AddLast (LIST &L, NODE *p)
{
	if(L.head==NULL)  L.head=L.tail=p;
	else
	{
		L.tail->next=p;
		L.tail=p;
	}
}
void nhap (LIST &L)
{
	sv x;
	char kt;   
	printf("
Nhan phim bat ki de tiep tuc nhap.");
	printf("
Nhan 0 de dung nhap.");
	do
	{
		kt=getch();
		if(kt=='0')  break;
		input(x);
		NODE *p=CreateNode(x);
		AddLast(L,p);
	} while (1);
}
void output (sv x)
{
	printf("
%s    %s      %d",x.MSSV,x.ten,x.dtb);
}
void xuat (LIST L)
{
	NODE *p;
	p=L.head;
	while(p!=NULL)
	{
		output(p->info);
		p=p->next;
	}
}
void maxdtb (LIST L)
{
	NODE *p,*max;
	int dem;
	p=L.head;
	max=p;
	while (p!=NULL)
	{
		if(p->info.dtb>max->info.dtb)  { max=p; dem=0; }
		if(p->info.dtb==max->info.dtb) { max=p; dem++; }
		p=p->next;
	}
	printf("
SV co dtb cao nhat la: 
");
	if(dem==0)  output(max->info);
	else
	{
		NODE *q=L.head;
		while (q!=NULL)
		{
			if(q->info.dtb==max->info.dtb) output(q->info);
			q=q->next;
		}
	}
}
void thongkedtb (LIST L)
{
	NODE *p;
	int dem=0;
	p=L.head;
	while (p!=NULL)
	{       
		if(p->info.dtb>=5)  dem++;
		p=p->next;
	}
	if(dem==0)  printf("
Ko co sv co dtb>=5.");
	else printf("
Co %d sv co dtb >=5.",dem);
}
void tim (LIST L)
{
	NODE *p;
	int dem=0;
	char k[20];
	printf("
Nhap ten sv can tim: ");
	fflush(stdin);
	gets(k);
	p=L.head;
	while (p!=NULL)
	{
		if(strcmp(k,p->info.ten)==0)      dem++;
		p=p->next;
	}
	if(dem!=0)
	{
		printf("
Tim thay sv: "); output(p->info);
	}
	else printf("
Ko tim thay.");
}
void xoa (LIST &L)
{
	NODE *p, *q;
	char a[10];
	p=L.head;
	q=NULL;
	printf("
Nhap MSSV can xoa: ");
	fflush(stdin);
	gets(a);
	while (p!=NULL)
	{
		if(strcmp(a, p->info.MSSV)==0)    break;
		else printf("
Ko co sv can xoa.");
		q=p;
		p=p->next;
	}
	if(q!=NULL)
	{
		if(p!=NULL)
		{
			q->next=p->next;
			delete (p);
			if(p==L.tail)  L.tail=q;
			delete(p);
		}
	}
	else
	{
		L.head=p->next;
		delete(p);
		if(L.head==NULL)  L.tail=NULL;
	}
}
void selectionsort (LIST &L)
{
	NODE *p,*q,*min;
	p=L.head;
	sv temp;
	while (p!=L.tail)
	{
		min=p;
		q=p->next;
		while (q!=NULL)
		{
			if(q->info.dtb<min->info.dtb)  min=q;
			q=q->next;
		}
		temp=p->info;
		p->info=min->info;
		min->info=temp;
		p=p->next;
	}
}
void menu()
{
	LIST L;
	NODE *p,*q,*moi;
	sv x;
	char chon;
	CreateList(L);
	do
	{
		printf("
			MENU");
		printf("
	1. Nhap ds");
		printf("
	2. In ds");
		printf("
	3. Ds sv co dtb cao nhat");
		printf("
	4. Ds sv co dtb >=5");
		printf("
	5. Tim sv");
		printf("
	6. Xoa sv");
		printf("
	7. Sap xep ds");
		printf("
	8. Chen sv");
		printf("
	Nhap 0 de thoat");
		chon=getch();
		switch(chon)
		{
		case '1': { nhap(L); break;}
		case '2': { xuat(L); break;}
		case '3': { maxdtb(L); break;}
		case '4': { thongkedtb(L); break;}
		case '5': { tim(L); break;}
		case '6': { xoa(L); printf("
Ds sau khi xoa: "); xuat(L); break;}
		case '7': { selectionsort(L);printf("
Ds sau khi sap xep: "); xuat(L); break;}
		case '8':
			{
				sv them;
				printf("
Nhap thong tin sv can them: ");
				input(them);
				NODE *t= CreateNode(them);
				AddLast(L,t);
				selectionsort(L);
				printf("
Ds sau khi them :");
				xuat(L);
				break;
			}
		case '0': exit(1);
		default: printf("
Nhap lai.");
		}
	} while (chon!='0');
}
int main()
{
	while(1)
	{
		menu();
		getch();
	}
}
Phạm Hoàng Tuấn viết 18:37 ngày 30/09/2018

Nếu e chịu khó search trên diễn đàn ở đây thì tối thiểu cũng có video của a @ltd về danh sách liên kết đó e.
Đây là danh sách các video của a @ltd . Danh sách liên kết đơn bài 44,liên kết đôi bài 53…Tuy là C++ nhưng a ngĩ sẽ giúp e hình dung dc phần nào về danh sách liên kết

CPP C++ Bài 01 - Giới thiệu C++ và Visual Studio C++ Bài 02 - Hello World C++ Bài 03 - Hello world (phần 2) C++ Bài 04 - Biến và kiểu dữ liệu C++ Bài 05 - CIN (phần 1) C++ Bài 06 - CIN (phần 2) C++ Bài 07 - Khai báo biến, Phép Gán C++ Bài 08 - Tầm vực của biến C++ Bài 09 - Câu lệnh If C++ Bài 10 - Hàm cơ bản kiểu void C++ Bài 11 - Hàm có tham số, tham số mặc định C++ Bài 12 - Hàm có nhiều tham số C++ Bài 13 - Class hay lớp C++ Bài 14 - Cách sử dụng biến trong class/lớp (Phần 1) C++ Bài 15 - Cá…

Và đây nữa

Cấp phát vùng nhớ cho một nút : (Nút ở đây như 1 điểm để nhấn vào) Nut *p = (Nut *)malloc(sizeof(Nut)); Thêm một nút vào đầu danh sách: Đầu tiên ta phải cấp phát vùng nhớ cho nút mới này và cho con trỏ p trỏ đến (quản lý), sau đó sẽ đưa giá trị vào nút. Thao tác cuối cùng là gắn nút mới này vào đầu danh sách bằng cách cho nút này quản lý nút đầu tiên của danh sách (p->Tiep=dau), tiếp đến cho con trỏ dau trỏ đến nút mới (nút mà p cũng đang trỏ). Chú ý là phải thực hiện trước bước (con trỏ d…

Amq viết 18:40 ngày 30/09/2018

À em xem video của anh Đạt rồi, xem mấy lần rồi nhưng cũng không hiểu gì hết ấy, rất khó hiểu.

Nguyễn Minh Dũng viết 18:36 ngày 30/09/2018

em có 1 code này

Code này của ai?

Bài giảng của anh Đạt em xem mấy lần nhưng càng xem càng mơ hồ ko biết gì luôn …

Em không hiểu chỗ nào? Em cần phải xác định mình cần hiểu cái gì, hiện giờ ko hiểu cái gì thì anh mới giúp được.

anh chị giải thích giúp em từ đầu đến cuối luôn nhé.

Không thể

Amq viết 18:35 ngày 30/09/2018

Code này của ai thì em pó tay, tại em search google thấy nên muốn xem thử ntn.
Em không hiểu ở chỗ, anh viết code rất nhiều, mà không có post cái code lên, em chẳng bik trong đó nó có cái gì, sao lại dùng tới nó, rồi sao lại có cái đó, … rất nhiều.
Nói giải thích từ đầu đến cuối thật ra không phải, giải thích chỗ nào liên quan tới danh sách liên kết thôi mà anh.
Cái bài code này em ko hiểu là không hiểu mấy cái tham số truyền vào, tham số truyền vào viết toàn 1 ký tự và nó là cái gì và có rất nhiều chỗ nữa …

Em hiểu cách nó liên kết như thế nào, nhưng lại không hiểu sao code lại như thế.

Nguyễn Minh Dũng viết 18:32 ngày 30/09/2018

Code này của ai thì em pó tay, tại em search google thấy nên muốn xem thử ntn.

Anh không thể giải thích cái code mà thậm chí em còn không biết của ai viết được.

Em không hiểu ở chỗ, anh viết code rất nhiều, mà không có post cái code lên, em chẳng bik trong đó nó có cái gì, sao lại dùng tới nó, rồi sao lại có cái đó, … rất nhiều.

Anh viết nhiều nhưng em có thể pause lại và chép mà. Mục tiêu là em phải tự code chứ không phải copy + paste.

Nói giải thích từ đầu đến cuối thật ra không phải, giải thích chỗ nào liên quan tới danh sách liên kết thôi mà anh.

Em đã hiểu bản chất danh sách liên kết là gì chưa?

Cái bài code này em ko hiểu là không hiểu mấy cái tham số truyền vào, tham số truyền vào viết toàn 1 ký tự và nó là cái gì …, rất khó hiểu.

Khó hiểu chỗ nào, hỏi chỗ nấy.

Em hiểu cách nó liên kết như thế nào, nhưng lại không hiểu sao code lại như thế.

Copy đoạn code em không hiểu, hỏi ngay đoạn đấy.


Em tưởng tượng

  • Một người đưa cho em đoạn code và nói chả hiểu gì, nhờ em giải thích. (1)
  • Một người khác đưa em một đoạn code và nói rõ, code này làm gì, người ta không hiểu tại sao ở dòng X lại code như vậy, nhờ em giải thích. (2)

Em thấy nên hỏi như thế nào, cách 1 hay cách 2?

Amq viết 18:43 ngày 30/09/2018

Em tự code mà anh, nhưng có nhiều cái anh đóng lại, em ko biết trong đó nó như thế nào là vậy đó anh.

Em sẽ tìm hiểu lại kỹ hơn rồi sẽ hỏi, vì thật sự em xem rất nhiều video về danh sách liên kết rồi, nhưng chỉ hiểu cái bản chất liên kết của nó, nhưng khi code thì rất lúng túng ko hiểu nó như thế nào. Em cũng ko biết hỏi kiểu ntn nữa.

Nguyễn Minh Dũng viết 18:38 ngày 30/09/2018

nhưng khi code thì rất lúng túng ko hiểu nó như thế nào. Em cũng ko biết hỏi kiểu ntn nữa.

Em gửi đoạn code em lúng túng lên anh sẽ giải thích.

Trần Hồng Phong viết 18:35 ngày 30/09/2018

Bìn tĩn phế bỏ võ công và tìm hiểu lại DSLK nào. Về cơ bản thì nó đâu có khó tới mức như những cmt trên, chắc do cát hạ bị khớp ngay từ ban đầu. Bìn tĩn lại sẽ dễ dàng tiếp cận vấn đề mới

Tien Tran viết 18:40 ngày 30/09/2018

bạn đó hiểu nhưng ko biết cách làm, em cũng thế, anh có thể làm lại video ko, làm từ cái cơ bản chỉ có kiểu node rùi từ từ mới tới cái sinhvien

Bài liên quan
0