BÀI TẬP VỀ CẦU TRÚC DỮ LIỆU

14 2.5K 8
BÀI TẬP VỀ CẦU TRÚC DỮ LIỆU

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

BÀI TẬP VỀ MẢNG Cho một mảng gồm n phần tử chứa các số nguyên. a. Cho một số x1. Hãy tìm phần tử x1 có trong mảng theo phương pháp tìm tuyến tính. b. Sắp xếp mảng tăng/giảm dần theo các phương pháp chọn trực tiếp, đổi chỗ trực tiếp, nổi bọt c. Cho một số nguyên x2, tìm phần tử x2 có trong mảng theo phương pháp tìm kiếm nhị phân(đối với mảng đã được sắp xếp). d. Tìm phần tử lớn nhất/nhỏ nhất trong mảng. (Theo phương pháp đệ qui và không đệ qui) BÀI TẬP VỀ DSLK Bài 1: Cho một DSLK đơn. Mỗi phần tử gồm info là một số nguyên và liên kết chỉ đến phần tử kế. a. Tạo 2 DSLK đơn mới (không phá huỷ DSLK đã cho). Một danh sách chứa các số− lẻ của danh sách đã cho. Một danh sách chứa các số chẵn của danh sách đã− cho. b. Viết chương trình in ra DSLK đã cho theo thứ tự ngược. (HD: Sử dụng đưa DSLK vào Stack). c. In ra các run tự nhiên từ DSLK đã cho: VÍ DỤ: DSLK ban đầu biểu diễn các số: 1 5 6 4 8 3 7 In ra các dãy số: 1 5 6 4 8 3 7 d. Sắp xếp tăng/giảm dần danh sách đã cho theo các phương pháp: chọn trực tiếp, nổi bọt, đổi chỗ trực tiếp. Bài 2: Cho một DSLK đơn. Mỗi phần tử info là một ký tự ('A' 'Z') và liên kết chỉ đến phần tử kế. a. Tạo một danh sách liên kết đơn mới chứa các ký tự không có trong danh sách đã cho. b. Viết chương trình con loại khỏi danh sách đã cho các phần tử vi phạm điều kiện tăng dần của danh sách. Biết rằng phần tử đầu tiên được giữ lại trong danh sách. VD: DSLK biểu diễn : D F H G K M A B Q DSLK sau khi loại: D F H K M Q. c. Với danh sách đã cho có thứ tự tăng dần (không có phần tử trùng nhau). Viết chương trình bổ sung vào danh sách này sao cho cho danh sách sẽ chứa đầy đủ các ký tự từ 'A' đến 'Z'. Bài 3: Quản lý thông tin sinh nhân viên của một lớp gồm : - Mã sinh viên : chuỗi 8 ký tự . - Tên sinh viên : chuỗi 20 ký tự . - Điểm Toán, Lý, Hoá Tổ chức cấu trúc dữ liệu thích hợp để biểu diễn các thông tin trên, và cài đặt có các chức năng: Cập nhật lý lịch cho− sinh viên (thêm, xoá, sửa) Tìm thông tin của một sinh viên.− In ra− những sinh viên có ĐTB > 5 với ĐTB = (Toán *2 +Lý +Hoá)/4. BÀI TẬP VỀ CÂY NHỊ PHÂN Cho một cây nhị phân tìm kiếm. Mỗi node trên cây có info là một số nguyên và liên kết chỉ đến cây con trái và cây con phải. a. Tính số node, số node lá, số node nhánh trên cây. b. Tính chiều cao của cây. c. Tính độ dài của cây. d. Tính tổng giá trị của các node trên cây. e. Nhập vào một số nguyên x. Viết thủ tục tìm x trên cây . Nếu tìm thấy hãy in ra màn hình giá trị của các node lớn hơn x. f. Duyệt cây nhị phân theo các phương pháp NLR, LNR, LRN. Bài 3: Quản lý thông tin sinh nhân viên của một lớp gồm : - Mã sinh viên : chuỗi 8 ký tự . - Tên sinh viên : chuỗi 20 ký tự . - Điểm Toán, Lý, Hoá Tổ chức cấu trúc dữ liệu thích hợp để biểu diễn các thông tin trên, và cài đặt có các chức năng: Cập nhật lý lịch cho sinh viên (thêm, xoá, sửa) Tìm thông tin của một sinh viên. In ra những sinh viên có ĐTB > 5 với ĐTB = (Toán *2 +Lý +Hoá)/4. Đáp án: #include<stdio.h> #include<conio.h> #include<string.h> typedef char infor1[15]; typedef char infor2[20]; typedef float infor3; struct Svien { //khai bao cac truong : infor1 masv; //ma sinh vien infor2 tensv //ten sinh vien ,ho; //Ho va ten dem cuar sinh vien infor3 dtoan //diem toan ,dly //diem ly ,dhoa //diem hoa ,dtb; //diem trung binh Svien *next; }; typedef Svien *list; list P,F; int cv;//cong viec infor1 code;//ma sinh vien infor2 name,fname;//ten sinh vien infor3 t,l,h,tb;//Diem toan, ly, hoa, va diem trung binh //---KHAI BAO CAC NGUYEN MAU HAM--- //--Nhap moi danh sach tu ban phim void nhap(list &F); //--in danh sach sinh vien len man hinh--- void xuat(list F); //--in danh sach sinh vien co diem trung binh >=7 len man hinh void xuat2(list F); //--Cap nhap ly lich cho sinh vien them - sua- xoa void them(list &F,infor1 code,infor2 fname,infor2 name,infor3 t,infor3 l,infor3 h,infor3 tb);//them mot sinh vien vao danh sach void sua(list ct);//sua phan tu chi boi con tro ct void xoa(list &F,list t);//xoa sinh vien duoc chi boi con tro t //--Tim thong tin sinh vien qua viec nhap ma sinh vien void tim(list F,infor1 code); //---XAY DUNG CAC CHUONG TRINH CON----- void nhap(list &F) { F = NULL; do { printf("\n Nhap ho va ten lot : "); gets(fname);gets(fname); printf("\n Nhap ten (bo trong de ket thuc) : "); gets(name); if(strlen(name)>0) { printf("\n Ma sinh vien : "); gets(code); printf("\n Diem toan : "); scanf("%f",&t); printf("\n Diem ly : "); scanf("%f",&l); printf("\n Diem hoa :"); scanf("%f",&h); tb = (t*2 + l + h)/4; them(F,code,fname,name,t,l,h,tb); } } while(strlen(name)>0); } void xuat(list F) { list P; P = F; if(P==NULL) printf("\n Danh sach rong !"); else { printf("\n DANH SACH SINH VIEN"); printf("\n"); printf("\n Ma sv Ho Ten Toan Ly Hoa Diem TB"); } while(P!=NULL) { printf("\n %10s%13s%7s%10.1f%10.1f%10.1f%10.1f",(*P).masv,(*P).ho,(*P).tensv,(*P).dtoan,(*P). (*P).dhoa,(*P).dtb); P= (*P).next; } printf("\n +An Enter de ve Menu chinh !"); } void them(list &F,infor1 code,infor2 fname,infor2 name,infor3 t,infor3 l,infor3 h,infor3 tb) { list P,before,after; P=new Svien; strcpy((*P).ho,fname); strcpy((*P).tensv,name); strcpy((*P).masv,code); (*P).dtoan = t; (*P).dly = l; (*P).dhoa = h; (*P).dtb = tb; after = F; while((after!=NULL)&&(strcmp((*P).tensv,(*after).tensv)>0)) { before = after; after = (*after).next; } (*P).next = after; if(F==after) F=P; else (*before).next = P; } void xoa(list &F,list t) { list after,before; after = F; while((after!=NULL)&&(after!=t)) { before = after; after = (*after).next; } if(after!=NULL) { if(F==t) F = (*t).next; else (*before).next = (*t).next; delete t; } } list timkiem(list F, infor1 code) { list P; P=F; while ( (P!=NULL) && strcmp((*P).masv,code) ) P= (*P).next; return P; } void xuat2(list F) { list P; P = F; printf("\n DANH SACH SINH VIEN CO DIEM TRUNG BINH LON HON 7"); printf("\n"); printf("\n Ma sv Ho Ten Toan Ly Hoa Diem TB"); while(P!=NULL) { if((*P).dtb>=7) { printf("\n %10s%13s%7s%10.1f%10.1f%10.1f%10.1f",(*P).masv,(*P).ho,(*P).tensv,(*P).dtoan,(*P). (*P).dhoa,(*P).dtb); } P= (*P).next; } printf("\n +An Enter de ve Menu chinh !"); } void sua(list ct) { printf("\n Ho va ten lot : "); gets(fname);gets(fname); strcpy((*ct).ho,fname);//thay ho va ten lot moi printf("\n Ten : "); gets(name); //lay chuoi tu ban phim strcpy((*ct).tensv,name);//thay the chuoi cu bang chuoi moi tt: printf("\n Ma sv : "); gets(code);//lay ma so sinh vien tu ban phim P = timkiem(F,code);//tim kiem xem co bi trung ma voi sinh vien khac khong if((P!= NULL)&&(strcmp((*ct).masv,code)!=0)) //neu trung bao loi va cho nhap lai ma sinh vien { printf("\n Sinh vien nay da co trong danh sach. Vui long nhap lai !"); goto tt; } strcpy((*ct).masv,code);//thay the ma so cu bang ma so moi printf("\n Diem Toan : "); scanf("%f",&t); (*ct).dtoan = t; printf("\n Diem Ly : "); scanf("%f",&l); (*ct).dly = l; printf("\n Diem Hoa : "); scanf("%f",&h); (*ct).dhoa = h; tb = (t*3 + l*2 + h)/6; (*ct).dtb = tb; printf("\n Sua thanh cong !"); } //======== HAM MAIN()======= void main() { clrscr(); F = NULL; char k; int tc; do { clrscr(); printf("\n"); printf("\n-------------Menu-------------"); printf("\n-----------MSTUDENT-----------"); printf("\n *1.Nhap moi danh sach "); printf("\n *2.Liet ke danh sach "); printf("\n------------------------------"); printf("\n Cap nhat ly lich cho sv"); printf("\n *3.Them "); printf("\n *4.Sua "); printf("\n *5.Xoa "); printf("\n------------------------------"); printf("\n *6.Tim sinh vien "); printf("\n------------------------------"); printf("\n *7.In ra nhung sv hoc luc kha "); printf("\n------------------------------"); printf("\n *8.About MStudent"); printf("\n------------------------------"); printf("\n *0.Thoat"); printf("\n------------------------------") ; printf("\n *Chon cong viec ban can lam : "); scanf("%d",&cv); switch(cv) { case 1: nhap(F);break; case 2: xuat(F); getch(); break; case 3: printf("\n Nhap ho va ten lot : "); gets(fname);gets(fname); printf("\n Nhap ten (bo trong de ket thuc) : "); gets(name); tt : printf("\n Ma so sinh vien : "); gets(code); P = timkiem(F,code); if(P!= NULL) { printf("\n Sinh vien nay da co trong danh sach. Vui long nhap lai !"); goto tt; } printf("\n Diem toan : "); scanf("%f",&t); printf("\n Diem ly : "); scanf("%f",&l); printf("\n Diem hoa : "); scanf("%f",&h); tb = (t*3 + l*2 + h)/6; them(F,code,fname,name,t,l,h,tb); printf("\n Them thanh cong !");getch();break; case 4: printf("\n Nhap ma so sinh vien cua sinh vien can sua : "); gets(code);gets(code); P = timkiem(F,code); if(P!=NULL) { printf("\n Thong tin sinh vien can sua : "); printf("\n Ma sv Ho Ten Toan Ly Hoa Diem TB"); printf("\n %10s%13s%7s%10.1f%10.1f%10.1f%10.1f",(*P).masv,(*P).ho,(*P).tensv,(*P).dtoan,(*P). (*P).dhoa,(*P).dtb); printf("\n Co chac la ban muon sua thong tin ve sv nay : C/K ?"); scanf("%c",&k); if(k=='c'||k=='C') sua(P); else printf("\n Lenh sua duoc huy !"); } else printf("\n Khong tim thay sinh vien co ma so %s trong danh sach !",code);getch(); break; case 5: printf("\n Nhap ma so sinh vien cua sinh vien can xoa : "); gets(code);gets(code); P = timkiem(F,code); if(P!=NULL) { printf("\n Thong tin sinh vien can xoa : "); printf("\n Ma sv Ho Ten Toan Ly Hoa Diem TB"); printf("\n %10s%13s%7s%10.1f%10.1f%10.1f%10.1f",(*P).masv,(*P).ho,(*P).tensv,(*P).dtoan,(*P). (*P).dhoa,(*P).dtb); printf("\n Co chac la ban muon xoa sinh vien nay : C/K ?"); scanf("%c",&k); if(k=='c'||k=='C') { xoa(F,P); printf("\n Xoa thanh cong !"); } else printf("\n Lenh xoa duoc huy !"); } else printf("\n Khong co sinh vien co ma sv %s trong danh sach !",code);getch(); break; case 6: printf("\n Nhap ma so sinh vien can tim : "); gets(code);gets(code); P = timkiem(F,code); if(P!=NULL) { printf("\n Thong tin sinh vien co ma sinh vien %s la : ",code); printf("\n Ma sv Ho Ten Toan Ly Hoa Diem TB"); printf("\n %10s%13s%7s%10.1f%10.1f%10.1f%10.1f",(*P).masv,(*P).ho,(*P).tensv,(*P).dtoan,(*P). (*P).dhoa,(*P).dtb); printf("\n\n Cac tuy chon : 1.Sua 2.Xoa 3.Ve Menu chinh "); printf("\n Ban chon : "); scanf("%d",&tc); switch(tc) { case 1 : sua(P);break; case 2 : xoa(F,P); printf("\n Xoa thanh cong !");break; } } else printf("\n Khong tim thay sinh vien co ma sv %s trong danh sach !",code);getch(); break; case 7: xuat2(F); getch(); break; case 8: printf("\n # THUC HANH CAU TRUC DU LIEU #"); printf("\n # -------@@@------- #"); printf("\n # CHUONG TRINH #"); printf("\n # QUAN LY THONG TIN SINH VIEN MSTUDENT #"); printf("\n # (De 13) #"); printf("\n # Nhom 10. Sinh vien thuc hien : #"); printf("\n # 1.Ngo Van Nang - Lop 06T1 #"); printf("\n # 2.Nguyen Thanh Huyen - Lop 06T1 #"); printf("\n # 3.Nguyen Le Phu Long - Lop 06T1 #"); printf("\n # copyright@ Nhom 10 #"); printf("\n # update 14.5.2008 #"); printf("\n printf("n +An Enter de ve Menu chinh !"); getch(); break; } } while(cv!=0); } QUẢN LÝ SINH VIÊN BẰNG DANH SÁCH LIÊN KẾT #include <stdio.h> #include <ctype.h> #include <stdlib.h> #include <string.h> //khoi tao danh sach rong typedef int infotype; struct node { infotype data; struct node *next; }*pd=NULL,*pc=NULL; /* Chen nut moi co du lieu la e vao DS pd */ void insert(infotype e) { struct node *t; t= (struct node*) malloc(sizeof(struct node)); t->data=e; t->next=NULL; if (pd==NULL) pd=pc=t; else { pc->next=t; pc=t; } } /* Nhap danh sach */ void nhap() { infotype e; do { printf("\n nhap so,nhap -1 de thoi:"); scanf("%d",&e); if (e!=-1) insert(e); } while (e!=-1); } /* Xem du lieu, dem so nut va tinh tong cac nut cua DS */ void xem(struct node *pd) { struct node *t; int dem=0,tong=0; t=pd; while (t!=NULL) { printf("%4d",t->data); dem++; tong+=t->data; t=t->next; } getch(); printf("\n So PT cua DS la %d",dem); printf("\n Tong cac PT cua DS la %d",tong); printf("\n TB cong cua cac pt la %6.2f",(float)tong/dem); printf("\n"); getch(); } /* Chen vao DS 1 nut moi co du lieu la e va o vi tri thu n */ void chen(infotype e,int n) { int dem=0; struct node *t,*tmp,*truoc=NULL; tmp=pd; while (tmp!=NULL && dem<n) { dem++; truoc=tmp; tmp=tmp->next; } if (tmp!=NULL) { t=(struct node*) malloc(sizeof(struct node)); t->data=e; if (truoc==NULL) { t->next=pd; pd=t; } else { truoc->next=t; t->next=tmp; } } else printf("\n Vi tri khong tim thay !"); } /* Xoa 1 nut cua DS o vi tri thu n */ void xoa(int n) { int dem=0; struct node *tmp,*truoc=NULL; tmp=pd; while (tmp!=NULL && dem<n) { dem++; truoc=tmp; tmp=tmp->next; } if (tmp==NULL) printf("\n Khong tim thay"); else { if (truoc==NULL) pd=tmp->next; else truoc->next=tmp->next; } } /* Dao nguoc danh sach - doi cac moi lien ket */ void daonguoc(struct node **pd, struct node **pc)

Ngày đăng: 19/12/2013, 08:59

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan