Đề bài:
Viết chương trình thực hiện các chức năng sau:
  • Nhập danh sách n sinh viên, mỗi sinh viên có các thông tin sau: Mã sinh viên, họ và tên, Lớp, Điểm lý thuyết, Điểm Thực hành, Điểm thi, Điểm Trung Bình. Danh sách sinh viên được tổ chức và lưu trữ dưới dạng danh sách liên kết đơn (sử dụng thuật toán chèn phần tử vào cuối danh sách khi tạo danh sách)
  • Nhập vào từ bàn phím thông tin của 1 sinh viên, chèn sinh viên này vào đầu danh sách
  • Chèn thông tin của sinh viên vào một vị trí x trong danh sách

Code:



#include <cstdlib>
#include <cstdio>
typedef struct sinhVien
{
int maSV, diemT, diemLT, diemTH;
float diemTB;
char hoTen[30], lop[15];
struct sinhVien *next;
} sv, *head, *tail;
sv *addNode()
{
sv *new_sv = (sv*)malloc(sizeof(sv));
if(new_sv == NULL)
{
printf("\nLoi khi tao bo nho!");
exit(1);
}
printf("\nNhap ten: ");
fflush(stdin);
scanf("%[^\n]s",&new_sv-> hoTen);
printf("Nhap ma SV: ");
scanf("%d", &new_sv->maSV);
printf("Nhap lop: ");
scanf("%s", &new_sv->lop);
printf("Nhap diem ly thuyet: ");
scanf("%d", &new_sv->diemLT);
printf("Nhap diem thuc hanh: ");
scanf("%d", &new_sv->diemTH);
printf("Nhap diem thi: ");
scanf("%d", &new_sv->diemT);
new_sv->diemTB = (new_sv->diemLT+new_sv->diemTH+new_sv->diemT)/3.0;
new_sv-> next = NULL;
return new_sv;
}
void addHead(sv *&head, sv *tail)
{
sv *p;
p = addNode();
if(head ==NULL)
{
head =p;
tail = head;
}
else
{
p->next = head;
head = p;
}
}
void addTail(sv *&head, sv *tail)
{
sv *p;
p = addNode();
if(head == NULL)
{
head = p;
tail = head;
}
else
{
tail = head;
while(tail->next != NULL)
tail= tail->next;
tail->next = p;
}
}
int demNode(sv *head)
{
int dem;
sv *p = head;
dem =0;
while(p != NULL)
{
dem++;
p= p->next;
}
return dem;
}
void addMid(sv *&head, sv *tail)
{
int x;
int maxNode = demNode(head);
do
{
printf("\nNhap vao vi tri can chen:");
scanf("%d", &x);
}
while(x <1 || x >maxNode);
sv *newNode, *q;
printf("\nNhap vao thong tin can chen");
int dem=1;
if(x==1)
addHead(head, tail);
else
{
newNode = addNode();
q = head;
while(dem!=x-1 && q != NULL)
{
q=q->next;
}
newNode->next= q->next;
q->next = newNode;
}
}
void input(sv *&head, sv *tail)
{
int n;
do
{
printf("nhap vao so luong SV: ");
scanf("%d", &n);
}
while(n<=0);
int maSV, diemT, diemLT, diemTH;
float diemTB;
char hoTen[30], lop[10];
for(int i=0; i<n; i++)
{
printf("\nNhap vao thong tin sinh vien: %d", i+1);
addTail(head, tail);
}
}
void in(sv *head)
{
sv *p = head;
printf("\n == DANH SACH SINH VIEN == \n");
printf("%20s%15s%10s%10s%10s%10s%10s\n", "Ho ten","Ma SV","Lop","Diem LT","Diem TH", "Diem T","Diem TB");
while(p != NULL)
{
printf("%20s%15d%10s%10d%10d%10d%10.2f\n", p->hoTen, p->maSV, p->lop, p->diemLT, p->diemTH, p->diemT, p->diemTB);
p=p->next;
}
}
int main()
{
sv *head, *tail;
head = NULL, tail = NULL;
input(head, tail);
in(head);

printf("\nNhap vao thong tin can chen dau DS");
addHead(head, tail);
printf("\nDanh sach sau khi chen thong tin vao dau DS");
in(head);

addMid(head, tail);
printf("\nDanh sach sau khi chen thong tin ");
in(head);
return 0;}

Kết quả test: