Bài làm tham khảo câu 1 đề ctdlgt đề 14-TI21006-I-1-01-ctdlgt
Wednesday, December 24, 2014
· Hàm xem danh sách liên kết dùng được
cho cả lifo và fifo.
void
xem(node *f){
node
*p=f;
while (p!=NULL) {
printf("%5d",p->info);
p=p->link;
}
}
§ Hàm kiểu void
nên khi gọi sẽ thực hiện in danh sách liên kết.
§ Gọi hàm : xem(f);
·
Hàm nhập danh sách liên kết đơn FIFO.
node *nhapfifo(node *f,node *l,int n) {
node
*p=f;
for(int
i=0;i<n;i++) {
p=new(node);
printf("\nNhap phan tu thu %d :
",i+1);
scanf("%d",&p->info);
p->link=NULL;
if(f==NULL){
f=p;
l=p;
}
else {
l->link=p;
l=p;
}
}
return f;
}
§ Hàm trả về địa
chỉ của con trỏ f. Con trỏ f trỏ vào ô đầu tiên của danh sách liên kết. Hàm trả
về địa chỉ con trỏ f để lấy mốc truy vết các phần tử tiếp theo của DSLK. Mất địa
chỉ cô đầu (con trỏ f) có thể nói là mất luôn dslk.
§ Gọi hàm : f=nhapfifo(f,l,n);
·
Hàm tìm kiếm. truyền vào hàm
con trỏ f và biến x. Biên x này được truyền từ lúc gọi hàm vào.
int
timkiem(node *f,int x){
int dem=0;
node
*p=f;
while (p!=NULL){
dem++;
if (p->info==x) return
dem;
p=p->link;
}
return 0;
}
§ Hàm trả về vị
trí khi tìm thấy x (if (p->info==x) return dem;) khi tìm thấy sẽ thoat khỏi hàm. Nếu
không có x xuất hiện trong danh sách thì trả về giá trị 0 (return 0;) ở cuối hàm.
§
Gọi
hàm : k=timkiem(f,x);
Nếu kết hợp với
hàm printf hay if hay …… thì chỉ cần gọi timkiem(f,x) hàm khi gọi tương đương với 1 số kiểu int. Và 1 lưu ý nữa là có thể thay x bằng số trực tiếp
ví dụ tìm kiếm x=20 thì có thể thay x=20 lúc gọi hàm (timkiem(f,20)).
· Hàm sắp xếp giảm.
void
sapxepgiam(node *f){
node
*p1,*p2;
p1=f;
while(p1->link!=NULL){
p2=p1->link;
while (p2!=NULL){
if (p1->info<p2->info){
int tg=p1->info;
p1->info=p2->info;
p2->info=tg;
}
p2=p2->link;
}
p1=p1->link;
}
}
§ Do hàm sắp chỉ đổi chỗ phần ruột chứ không đổi chỗ các mối
nối nên không thay đổi các liên kết nên ta sử dụng hàm kiểu void và không cần
trả về con trỏ f chứa địa chỉ ô đầu tiên. Hàm sử dụng giải thuật sắp xếp tuần tự.
§ Gọi hàm: sapxepgiam(f);
·
Hàm main() Nếu tìm với số x cố định khác thì có thể thay đổi giá trị
bôi vàng. Còn nếu tìm kiếm giá trị nhập từ bàn phím thì bạn cần khai thêm biến x.
và làm lệnh nhập x. sau đó thay thế phần bôi vàng bằng x.
int
main()
{
node
*f=NULL,*l=NULL;
int n;
printf("\nNhap so phan tu n : ");
scanf("%d",&n);
f=nhapfifo(f,l,n);
printf("\nDanh sach vua nhap :");
xem(f);
int k=timkiem(f,20);
if(k!=0) printf("\nTim
thay x=20 xuat hien
tai vi tri %d",k);
else printf("\nKhong
tim thay x=20");
printf("\nDanh sach sau khi sap xep giam");
sapxepgiam(f);
xem(f);
getch();
}
Code cả bài c/c++ câu 1a.
#include <stdio.h>
#include <conio.h>
typedef struct node {
int info;
node
*link;
};
void
xem(node *f){
node
*p=f;
while (p!=NULL) {
printf("%5d",p->info);
p=p->link;
}
}
node *nhapfifo(node *f,node *l,int n) {
node
*p=f;
for(int
i=0;i<n;i++) {
p=new(node);
printf("\nNhap phan tu thu %d :
",i+1);
scanf("%d",&p->info);
p->link=NULL;
if(f==NULL){
f=p;
l=p;
}
else {
l->link=p;
l=p;
}
}
return f;
}
int
timkiem(node *f,int x){
int dem=0;
node
*p=f;
while (p!=NULL){
dem++;
if (p->info==x) return
dem;
p=p->link;
}
return 0;
}
void
sapxepgiam(node *f){
node
*p1,*p2;
p1=f;
while(p1->link!=NULL){
p2=p1->link;
while (p2!=NULL){
if (p1->info<p2->info){
int tg=p1->info;
p1->info=p2->info;
p2->info=tg;
}
p2=p2->link;
}
p1=p1->link;
}
}
int
main()
{
node
*f=NULL,*l=NULL;
int n;
printf("\nNhap so phan tu n : ");
scanf("%d",&n);
f=nhapfifo(f,l,n);
printf("\nDanh sach vua nhap :");
xem(f);
int k=timkiem(f,20);
if(k!=0) printf("\nTim
thay x=20 xuat hien tai vi tri %d",k);
else printf("\nKhong
tim thay x=20");
printf("\nDanh sach sau khi sap xep giam");
sapxepgiam(f);
xem(f);
getch();
}
test câu 1a
Mô tả khai báo cấu trúc dữ liệu của
danh sách liên kết kiểu LIFO với mỗi phần tử chứa
·
masv
(mã sinh viên do chứa chữ và số dạng xâu kí tự nên ta khai báo mảng kiểu char để
lưu trữ char masv[20];).
·
hoten
( Họ và tên dạng xâu kí tự nên ta cũng khai báo dưới dạng mảng kiểu char char hoten[40];).
·
tuoi
( Tuổi dạng số nguyên với phạm vi không lớn nhỏ hơn 300 và lớn hơn 0 nên ta
khai báo kiểu int int tuoi;).
·
dmon1,dmon2,
tb (điểm môn 1,2 và điểm trung bình là kiểu số thực ta khai báo kiểu float float
dmon1,dmon2,tb;).
·
xl
(xếp loại dạng xâu kí tự nên ta cũng khai báo dưới dạng mảng kiểu char char xl[15];).
Code c/c++.
typedef struct sinhvien
{
char masv[20],hoten[40],xl[15];
int tuoi;
float dmon1,dmon2,tb;
sinhvien
*link;
};
sinhvien *f=NULL,*p;
Mong các bạn góp ý ở phía dưới. Nhớ bấm G+ ủng hộ

All comments [ 0 ]
Your comments