30/09/2018, 19:30
[Hỏi] Cách dùng con trỏ trong Struct ( Ngôn ngữ C )
Chào anh chị và các bạn trên diễn đàn , em đang làm bài tập quản lý sinh viên sử dụng Struct trong C , có đoạn code này em nghĩ mãi không hiểu ý nghĩa của nó là gì , em post code lên mong anh chị và các bạn giải thích giúp em ạ
đoạn code em không hiểu được ý nghĩa của chúng nằm trong hàm taoDS đó là :
last->link = p;
last = p;
mong các anh chị và các bạn giải nghĩa giúp em ý nghĩa của chúng ạ
và đây là code của cả bài ạ
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct sinhVien{
char hten[30];
int tuoi;
float diemTB;
struct sinhVien *link;
}p_sv;
p_sv *first, *last, *p;
void taoDS(){
char ht[30],tl;
int i=0,tuoi;
float dtb;
first = NULL;
do{
printf("
PHIEU NHAP THONG TIN SINH VIEN.
");
printf("Sinh vien %d:
",i+1);
printf(" Ho ten: ");
fflush(stdin);
gets(ht);
printf(" Tuoi: ");
scanf("%d",&tuoi);
printf(" Diem TB: ");
scanf("%f",&dtb);
fflush(stdin);
p = (p_sv *)malloc(sizeof(p_sv));
strcpy(p->hten,ht);
p->diemTB = dtb; p->tuoi = tuoi;
if(first == NULL){
first = p;
last = p;
}else{
last->link = p;
last = p;
}
p->link = NULL;
i++;
printf("
Tiep tuc(Y)
Thoat(N
");
fflush(stdin);
printf(" Dap an cua ban: ");
tl = getchar();
}while(tl != 'n');
}
void xuat(){
int i=0;
printf("
DANH SACH SINH VIEN
");
printf("STT Ho ten Tuoi Diem TB
");
p = first;
while(p != NULL){
printf("%2d %s %d %.2f
",++i,p->hten,p->tuoi,p->diemTB);
p = p->link;
}
}
int main(){
char tl;
do{
fflush(stdin);
printf("
DANH SACH SINH VIEN");
printf("
MENU:
");
printf("
Phim 1. Nhap danh sach.");
printf("
Phim 2. In danh sach.");
printf("
Phim 3. Them sinh vien(Them sau)");
printf("
Phim 4. Thoat.");
printf("
Ban chon: ");
tl = getchar();
fflush(stdin);
switch(tl){
case '1': taoDS(); break;
case '2': xuat(); break;
case '3': themSau(); break;
case '4': printf("Cam on da su dung chuong trinh. Goodbye
");break;
default : printf("Phim ban chon khong dung. Vui long thu lai.
");
break;
}
}while(tl!='4');
}
Bài liên quan
struct
sinhVien
của bạn gồm các thuộc tính hTen, tuoi, diemTB và một con trỏlink
trỏ đến một node khác kiểusinhVien
, khi thêm một sv mới, hàm của bạn kiểm tra first có trỏ đến null không? nếu nó trỏ đến null nghĩa là chưa có node nào thì chỉ việc thêm, còn nếu nó != null thì nghĩa là danh sách khác rỗng, khi bạn thêm một node mới vào cuối thì cái last phải trỏ đến node mới này. Nghĩa là giải sử last đang trỏ tới nodenode1
, bây giờ thêm node mới thì node1 phải trỏ tớinewNode
, do đó last->link = p chính là làm thao tác này, cònlast = p
là để gán lại con trỏ đuôi, vì lúc này phần tử cuối cùng lànewNode
nên last phải trỏ vào phần tử mới nàyĐể hiểu thêm về struct bạn có thể xem bài giảng struct trong c
Ngày trước học CSDL & GT đến phần danh sách liên kết đơn cũng không hiểu chỗ này y hệt bạn. Câu trả lời thì bạn @VuVanChung đã trả lời rất rõ rồi, nếu vẫn chưa hiểu bạn lên youtube tìm danh sách liên kết đơn là hiểu ngay à.
em cám ơn các anh đã giúp đỡ em ạ
em đi học bận quá giờ mới lên mạng được , 1 lần nữa cho em cám ơn các anh