[Video] C++ Bài 46 - Link List - Chuẩn bị class SinhVien

linked-list
video
c++

(Lê Trần Đạt) #1


#Đăng ký khóa học C++ cơ bản 2016 ( NEW ) tại đây :
#Thông tin về khóa học xem tại đây :

-Sự khác biệt giữa 2 khóa học cũ và mới :
+Khóa học C++ cơ bản 2016 là khóa học mới, được đầu tư nhiều hơn từ nội dung, phương pháp học, cách học hiệu quả.
+Trong khóa học còn có nhiều kiến thức mới như thực hành trên HackerRank, thực hành trên Codefights và Đạt nghĩ mọi người nên học khóa học mới, bởi vì đây là kiến thức mới, phù hợp với hiện tại… Mặt khác âm thanh cũng tốt hơn nhiều so với khóa học cũ giúp đỡ việc lắng nghe và hiểu được tốt hơn.


Tổng hợp các videos C++ của Lê Trần Đạt ( khóa FREE )
Học Danh Sách Liên Kết?
Tổng hợp tất cả các video lập trình hiện có tại daynhauhoc.com
(Bùi Thanh Tùng) #2

Đang quất tới bài này. Chưa hiểu (tạm thời chưa cần hiểu nhưng nếu có thể giải thích thì mình xin cảm ơn rất nhiều :smiley: ) cái _itoa dưới đây có tác dụng gì.
Khi biên dịch code thì VS2013 báo lỗi:Mình thay thế bằng _itoa_s như ử dưới có được không vậy nhỉ?

Giúp mình với các bạn ơi. :stuck_out_tongue:


(Lê Trần Đạt) #3

Được, _itoa_s là phiên bản an toàn của itoa. Wow, code nhìn đẹp quá :smile:

http://msdn.microsoft.com/en-us/library/0we9x30h.aspx


(Bùi Thanh Tùng) #4

Uhm okie bạn :smiley:


(Lê Trần Đạt) #5

À, để a làm các ứng dụng sử dụng Qt đó mà. Anh xài visual studio quen rồi nên anh cài cái plugin đó vào để viết code Qt cho tiện :smiley:


(KhoiNguyen) #6

Hình như dùng _itoa , printf, strcpy… visual studio đều báo cái warning này_CRT_SECURE_NO_WARNINGS.
Sửa lại phiên phản an toàn của mấy hàm đó thì build OK nhưng chương trình hay crack vì bộ đệm quá small. Mấy cái này rắc rối phết, mong rằng có ai pro viết một bài về mấy hàm này .


(Bùi Thanh Tùng) #7

Source Code Bài 46 - 52 Phần Linked_List đây nhé :blush:
:stuck_out_tongue:


[Video] C++ Bài 44 - Link List Danh Sách Liên Kết - Giới thiệu
(Lê Trần Đạt) #8

Nice, ở đâu ra vậy Tùng @_@


(Tuan Son Nguyen) #9
for (index = from->Next(); index->Next() != 0; index = index->Next())
{
    if (index->Mssv() == mssv)
    {
        RemoveSinhVien(previous, index);
        break;
    }
    previous = index;
}

anh Đạt giải thích giúp em lệnh for này nha. index = index->Next() nghĩa là sao?


(Lê Trần Đạt) #10

I moved 7 posts to a new topic: Làm sao để Visual Studio nhắc lệnh tốt hơn?


(Tuan Son Nguyen) #11

Giờ em đã hiểu vấn đề rồi :), do lúc trước em không hiểu LinkList nên không giải thích được.


(Lê Trần Đạt) #19

I moved a post to a new topic: Cách cấu hình compiler GNU hoặc MinGWanBC cho notepad++?


(Minh Hoàng) #20

cho em hỏi cái này.
Em có 1 định nghĩa struct như sau

typedef struct SV
{
 int STT;
 SV * next;
}

và em có khai báo head và danh sách sinh viên để lưu vị trí đầu tiên của danh sách

SV * SinhVien;
SV * head;

1/Tại sao SinhVien phải cấp phát một vùng nhớ thì thằng head mới có thể lưu được địa chỉ của sinh viên đầu tiên? Theo em nghĩ thì SinhVien khi khai báo đã có địa chỉ rồi nhưng nó chưa trỏ tới một nhớ nào hết thôi. Vậy tại sao head lại không trỏ đến thằng SinhVien được, hay head phải trỏ đến vùng nhớ luôn?
2/Tại sao khi em làm như thế này thì không được?

SinhVien=SinhVien->next;
Capphat(SinhVien); //hàm chỉ cấp phát một vùng nhớ kiểu SV

Mà phải làm như thế này

Capphat(SinhVien->next);
SinhVien=SinhVien->next;

(Lê Trần Đạt) #21

Em cấp phát như thế nào? Điểm này anh không rõ em đang làm gì.

Cho anh xem code của hàm cập nhật?


(Minh Hoàng) #22
void Capphat(SV *&a)
{
	a = (SV *)malloc(sizeof(SV));
}

Cập nhật?


(Minh Hoàng) #23

đây là code hôm qua em sửa cho bạn Học, thấy kì kì. 2 chỗ em hỏi nằm ở dòng 35-37 và 58-59. @ltd

#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#define MLEN 20


typedef struct PET 
{
	char type[MLEN]; 
	char name[MLEN]; 
	int HP; 
	int attack; 
	int defense;
	int chisophu;
	int nSkill; 
	char** skill;
	PET * next;
};
typedef struct PET P;


void Capphat1(P *&DanhSach)
{
	DanhSach = (P *)malloc(sizeof(P));
}
void Capphat2(char **&Skill)
{
	Skill = (char **)calloc(4, sizeof(char));
	for( int i = 0 ; i < 4 ; i++)
		Skill[i] = (char *)calloc(19,sizeof(char));
}
void main()
{
        // điểm thứ 1
	P *a;
	Capphat1(a);
	P *head;
        //
	head=a;
	int i;
	FILE *DS = fopen("test.txt","rt");
	while ( !feof(DS) )
	{
		fscanf(DS , "%s ", a->name);
		fscanf(DS , "%s ", a->type);
		fscanf(DS , "%d ", &a->HP);
		fscanf(DS , "%d ", &a->attack);
		fscanf(DS , "%d ", &a->defense);
		fscanf(DS , "%d ", &a->chisophu);
		fscanf(DS , "%d ", &a->nSkill);
		Capphat2(a->skill);
		for (i=0;i<4;i++)
			fscanf(DS ,	"%s ", a->skill[i]);
		if (feof(DS))
			a->next=NULL;
		else
		{ //điểm thứ 2
			Capphat1(a->next);
a=a->next;
		}
	}
	fclose(DS);
	a=head;
	while (a!=NULL)
	{
		printf("\n%s", a->name);
		printf("\n%s", a->type);
		printf("\n%d", a->HP);
		printf("\n%d", a->attack);
		printf("\n%d", a->defense);
		printf("\n%d", a->chisophu);
		printf("\n%d", a->nSkill);
		for (i=0;i<4;i++)
			printf("\n%s ", a->skill[i]);
		a=a->next;
	}
	getchar();
	getchar();
}

(Lê Trần Đạt) #24

Chỗ này là sao nhỉ?

SinhVien phải cấp phát một vùng nhớ

Có phải em muốn nói "Cấp phát một vùng nhớ cho con trỏ SV * SinhVien;?

Thì thằng Head mới có thể lưu được địa chỉ của sinh viên đầu tiên?"

Là sao nhỉ, head lưu như thế nào? địa chỉ nào của sinh viên?

SinhVien là con trỏ, vì là con trỏ thì nó có địa chỉ, nhưng mà đó là địa chỉ của con trỏ. Con trỏ là biến mà lưu địa chỉ của biến khác.

Em hỏi địa chỉ của sinh viên là em đang nói tới địa chỉ nào? Câu hỏi của em tối nghĩa quá. Hay em gửi toàn bộ code lên cho anh đọc thử.


OK, em đã gửi code thì anh đọc và hiểu rồi. Để anh giải thích từng điểm một.

    P *a;
    Capphat1(a);
    P *head;
    //
    head=a;

a là con trỏ.
head cũng là con trỏ.
con trỏ chứa địa chỉ của biến khác.

=> head = a có nghĩa là gán địa chỉ mà a đang giữ cho head. Kể từ bây giờ, ahead cùng trỏ tới cùng một địa chỉ.

Hi vọng giải thích thế này giải thích được cho em.


(Minh Hoàng) #25

tức là head sẽ không trỏ đến a mà head sẽ trỏ tới vùng nhớ mà a trỏ tới đúng không anh? Vì thằng a chưa trỏ tới đâu nên head cũng không thể trỏ đến được?
còn ở điểm thứ 2. Thì cũng tương tự đúng không anh.


(Lê Trần Đạt) #26

Đúng vậy.

Mới tạo ra a trỏ tới vùng nhớ lung tung, tầm bậy, ko kiểm soát được.

Đúng vậy.


(Tuấn Nguyễn) #27

Source code danh sách liên kết sinh viên thao tác với tập tin .347 dòng ( đã lược bỏ bớt) :wink:


83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?