[Bài tập C] Quản lý sinh viên sử dụng danh sách liên kết đơn(Linked List)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdio_ext.h>
struct Sinhvien {
char hoTen[50];
char lop[10];
int tuoi;
};
typedef struct Sinhvien SV;
struct node {
SV sv;
struct node *pNext;
};
typedef struct node NODE;
struct list {
NODE *pHead, *pTail;
};
typedef struct list LIST;
void Init(LIST *lt) {
lt->pHead = lt->pTail = NULL;
}
int isListEmpty(LIST lt) {
if(!lt.pHead) {
return 1;
} return 0;
}
void getList(LIST lt) {
NODE *pNode;
if(isListEmpty(lt))
printf("Danh sach rong!\n");
else {
pNode = lt.pHead;
while(pNode) {
printf("Ten sinh vien: ");
puts(pNode->sv.hoTen);
printf("Tuoi: %d", pNode->sv.tuoi);
printf("\nLop: ");
puts(pNode->sv.lop);
pNode = pNode->pNext;
}
}
}
NODE *makeNode(NODE *pNode, SV sv) {
pNode = (NODE*)malloc(sizeof(NODE));
if(!pNode) {
printf("Cap phat bo nho that bai!");
return NULL;
}
pNode->pNext = NULL;
strcpy(pNode->sv.hoTen, sv.hoTen);
strcpy(pNode->sv.lop, sv.lop);
pNode->sv.tuoi = sv.tuoi;
return pNode;
}
void insertHead(LIST *lt, NODE *pNode) {
if(lt->pHead == NULL)
lt->pHead = lt->pTail = pNode;
else {
pNode->pNext = lt->pHead;
lt->pHead = pNode;
}
}
void input(LIST *lt, int k) {
Init(lt);
SV sv[k];
NODE *pNode;
int i;
for(i = 0; i < k; i++) {
printf("Nhap ho ten sinh vien: ");
//if(fgets(sv[i].hoTen, 30, stdin) != NULL);
__fpurge(stdin);
fgets(sv[i].hoTen, 30, stdin);
sv[i].hoTen[strlen(sv[i].hoTen)-1] = '\0';
printf("Lop: ");
//if(fgets(sv[i].lop, 10, stdin) != NULL);
fgets(sv[i].lop, 10, stdin);
sv[i].lop[strlen(sv[i].lop)-1] = '\0';
printf("Tuoi: ");
scanf("%d", &sv[i].tuoi);
pNode = makeNode(pNode, sv[i]);
insertHead(lt, pNode);
}
}
int main()
{
LIST lt;
int k;
printf("Nhap so sinh vien can them: ");
scanf("%d", &k);
input(<, k);
getList(lt);
return 0;
}
#include <stdlib.h>
#include <string.h>
#include <stdio_ext.h>
struct Sinhvien {
char hoTen[50];
char lop[10];
int tuoi;
};
typedef struct Sinhvien SV;
struct node {
SV sv;
struct node *pNext;
};
typedef struct node NODE;
struct list {
NODE *pHead, *pTail;
};
typedef struct list LIST;
void Init(LIST *lt) {
lt->pHead = lt->pTail = NULL;
}
int isListEmpty(LIST lt) {
if(!lt.pHead) {
return 1;
} return 0;
}
void getList(LIST lt) {
NODE *pNode;
if(isListEmpty(lt))
printf("Danh sach rong!\n");
else {
pNode = lt.pHead;
while(pNode) {
printf("Ten sinh vien: ");
puts(pNode->sv.hoTen);
printf("Tuoi: %d", pNode->sv.tuoi);
printf("\nLop: ");
puts(pNode->sv.lop);
pNode = pNode->pNext;
}
}
}
NODE *makeNode(NODE *pNode, SV sv) {
pNode = (NODE*)malloc(sizeof(NODE));
if(!pNode) {
printf("Cap phat bo nho that bai!");
return NULL;
}
pNode->pNext = NULL;
strcpy(pNode->sv.hoTen, sv.hoTen);
strcpy(pNode->sv.lop, sv.lop);
pNode->sv.tuoi = sv.tuoi;
return pNode;
}
void insertHead(LIST *lt, NODE *pNode) {
if(lt->pHead == NULL)
lt->pHead = lt->pTail = pNode;
else {
pNode->pNext = lt->pHead;
lt->pHead = pNode;
}
}
void input(LIST *lt, int k) {
Init(lt);
SV sv[k];
NODE *pNode;
int i;
for(i = 0; i < k; i++) {
printf("Nhap ho ten sinh vien: ");
//if(fgets(sv[i].hoTen, 30, stdin) != NULL);
__fpurge(stdin);
fgets(sv[i].hoTen, 30, stdin);
sv[i].hoTen[strlen(sv[i].hoTen)-1] = '\0';
printf("Lop: ");
//if(fgets(sv[i].lop, 10, stdin) != NULL);
fgets(sv[i].lop, 10, stdin);
sv[i].lop[strlen(sv[i].lop)-1] = '\0';
printf("Tuoi: ");
scanf("%d", &sv[i].tuoi);
pNode = makeNode(pNode, sv[i]);
insertHead(lt, pNode);
}
}
int main()
{
LIST lt;
int k;
printf("Nhap so sinh vien can them: ");
scanf("%d", &k);
input(<, k);
getList(lt);
return 0;
}
Nhận xét
Đăng nhận xét