1. Trang chủ
  2. » Giáo Dục - Đào Tạo

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

15 2,5K 8
Tài liệu đã được kiểm tra trùng lặp

Đ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

Thông tin cơ bản

Tiêu đề Bài tập về cầu trúc dữ liệu
Thể loại Bài tập
Định dạng
Số trang 15
Dung lượng 61,5 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

BÀI TẬP VỀ MẢNGCho một mảng gồm n phần tử chứa các số nguyên.. Hãy tìm phần tử x1 có trong mảng theo phương pháp tìm tuyến tính.. Cho một số nguyên x2, tìm phần tử x2 có trong mảng theo

Trang 1

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

Trang 2

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 -

Trang 3

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,

Trang 4

(*P).tensv,(*P).dtoan,(*P).dly,(*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;

}

Trang 5

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).dly,(*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()

Trang 6

{

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);

Trang 7

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).dly,(*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).dly,(*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)

{

Trang 8

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).dly,(*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

Trang 9

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();

Trang 10

}

/* 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;

Trang 11

}

}

/* Dao nguoc danh sach - doi cac moi lien ket */

void daonguoc(struct node **pd, struct node **pc)

{

struct node *truoc=NULL,*sau,*no;

if (*pd != NULL)

{

sau= *pd;

no= sau->next;

*pc= *pd;

while (no!=NULL)

{

sau->next=truoc;

truoc=sau;

sau=no;

no=no->next;

}

sau->next=truoc;

*pd=sau;

}

}

/* Dao nguoc danh sach bang de qui */

struct node *daonguocdq(struct node **pd, struct node **pc) {

struct node *t;

if (*pd!=NULL)

{

if ((*pd)->next != NULL)

{

t=daonguocdq(&((*pd)->next),pc);

(*pc)->next=*pd;

*pc=*pd;

(*pc)->next=NULL;

*pd=t;

}

return *pd;

}

else

return NULL;

}

/* Xoa danh sach */

void xoaDS(struct node **pd)

{

struct node *t;

t=*pd;

while (t!=NULL)

{

t=(*pd)->next;

free(*pd);

Trang 12

*pd=t;

}

*pd=NULL;

}

/* sap xep DS theo thu tu tang dan */

void sapxep()

{

struct node *t,*tt;

infotype tmp;

t=pd;

while (t->next != NULL)

{

tt=t->next;

while (tt != NULL)

{

if (t->data>tt->data)

{

tmp=t->data;

t->data=tt->data;

tt->data=tmp;

}

tt=tt->next;

}

t=t->next;

}

}

/* Tim kiem 1 nut trong DSLK co thu tu */

int tim(struct node *pd,infotype x)

{

int n=0;

while (pd != NULL && pd->data<x)

{

n++;

pd=pd->next;

}

if (pd->data==x)

return n;

else

return -1;

}

main()

{

int m;

infotype d;

nhap();

xem(pd);

/* printf("\nNhap vi tri can chen: ");scanf("%d",&m); printf("\n Nhap so can chen: ");scanf("%d",&d); chen(d,m);

xem(pd);

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

TỪ KHÓA LIÊN QUAN

w