1. Trang chủ
  2. » Luận Văn - Báo Cáo

Báo cáo bài tập thực hành môn cấu trúc dữ liệu và giải thuật

31 6,6K 14
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

Định dạng
Số trang 31
Dung lượng 186 KB

Nội dung

Tài liệu tham khảo công nghệ thông tin Báo cáo bài tập thực hành môn cấu trúc dữ liệu và giải thuật

Trang 1

BÁO CÁO BÀI TẬP THỰC HÀNH MÔN CẤU TRÚC DỮ LIỆU & GIẢI THUẬT

Bài 1 Viết chương trình con bằng gaiir thuật đệ qui để thực hiện các công việc sau:

else if(n<=1) return 1;

else return n*giaithua(n-1);

Trang 2

else if(a>b) return UCLN(a-b,b);

else return UCLN(a,b-a);

Trang 3

DS.n=0;

}

//them vao dau sanh sach

void ThemDau(DanhSach &DS,int phantu)

//them vao cuoi danh sach

void ThemCuoi(DanhSach &DS,int phantu)

{

DS.n++;

DS.PhanTu[DS.n]=phantu;

}

//nhap va luu tru theo thu tu

void Nhap(DanhSach &DS)

//nhap va luu tru nguoc voi thu tu nhap

void NhapNguoc(DanhSach &DS)

Trang 4

Bài 3 Tương tự bài tập 1, nhưng cài đặt bằng con trỏ.

//hien thi danh sach

void Display(List &L)

Trang 5

void Add_LIFO(List &L,int phantu)

//vao truoc ra sau (them vao cuoi danh sach)

void Add_FILO(List &L,int phantu)

//nhap va luu tru theo thu tu nhap vao hoac nguoc lai

void Add_And_Insert(List &L)

{

char ch='1';int sx=0;

cout<<"Ban muon sap xep day so theo thu tu nao ?";

cout<<"\n Nhan phim '1' neu theo thu tu nhap\n Nhan phim bat ky neu nguoc

lai";cin>>sx;

cout<<"Nhap vao mot day so nguyen: ";

while(int(ch)>=48 && int(ch)<= 57)

- Danh sách được cài đặt bằng mảng(DS đặc)

- Danh sách được cài đặt bằng con trỏ(DS liên kết)

Trang 6

Node *tam1=new Node;

Node *tam2=new Node;

Trang 7

Node *tam=new Node;

//tim vi tri thich hop

if(tam->PhanTu>=pt && tam->Right->PhanTu<=pt)

Trang 8

//them vao vi tri k trong sanh sach

void ThemK(DanhSach &DS,int phantu,int k)

//tim vi tri thich hop va them vao sanh sach

void Them(DanhSach &DS,int phantu)

// Doi voi danh sach duoc luu tru dac

-void NhapVaSapXep(DanhSach &DS)

{

char ch='1';

int i=0;

cout<<"Nhap vao mot day so nguyen: ";

while(int(ch)>=48 && int(ch)<= 57)

Trang 9

//xoa phan tu tai vi tri K

void XoaK(DanhSach &DS,int k)

//xoa nhung phan tu trung nhau trong danh sach

void XoaPTTrung(DanhSach &DS)

// - doi voi danh sach luu tru bang con tro

-void Delete(List &L)

Trang 10

Bài 9 Viết chương trình con đếm số lần xuất hiện của mỗi ký tự trong 1 chuỗi ký tự.

void Dem(DanhSach &DS)

// - doi voi danh sach luu tru bang con tro

-void Count(List &L)

Trang 11

// - doi voi danh sach luu tru bang con tro

-void Change(List &L)

Trang 12

Bài 11 vctc nhận vào từ bàn phím 1 dãy số nguyên, lưu trữ nó trong 1 danh sách có thứ tự tăng không có 2 phần tử trùng nhau, theo cách sau: Với mỗi phần tử được nhập vào chương trình con phải tìm kiếm xem nó có trong danh sách chưa? Nếu chưa có thì xen nó vào danh sách cho đúng thứ tự vctc trên trường hợp danh sách được cài đặt bằng mảng và cài đặt bằng con trỏ.

//them vao vi tri k trong sanh sach

void ThemK(DanhSach &DS,int phantu,int k)

//tim vi tri thich hop va them vao sanh sach

void Them(DanhSach &DS,int phantu)

{

if(DS.n==0) ThemDau(DS,phantu);

else if(phantu<DS.PhanTu[1]) ThemDau(DS,phantu);

else if(phantu>DS.PhanTu[DS.n]) ThemCuoi(DS,phantu);

//them vao vi tri thich hop trong danh sach

void Add(List &L,int phantu)

{

if(Emty(L)) Add_LIFO(L,phantu);

else if(phantu <= L.First->Right->Info) Add_LIFO(L,phantu);//them dau

else if(phantu >= L.Last->Left->Info) Add_FILO(L,phantu); //them cuoi

Trang 13

Bài 12 Viết chương trình con trộn 2 danh sách liên kết chứa các số nguyên theo thứ

tự tăng để được 1 danh sách cũng có thứ tự

void TronDS(DanhSach &A,DanhSach &B,DanhSach &C)

// - doi voi danh sach luu tru bang con tro

-void Combine(List &A,List &B,List &C)

Trang 14

Bài 13 Viết chương trình con xóa khỏi danh sách lưu trữ cá số nguyên các phần tử

là là số nguyên lẻ,cũng trong 2 trường hợp là cài đặt bằng mảng và con trỏ.

void XoaLe(DanhSach &DS)

// - doi voi danh sach luu tru bang con tro

-void Del_(List &L)

Trang 15

// - doi voi danh sach luu tru bang con tro

-void Tach2(List &P,List &Q,List &R)

//them vao vi tri thich hop trong danh sach

void Add(List &L,int hs,int sm)

Trang 16

Bài 16 Để lưu trữ 1 số nguyên lớn ta có thể dùng danh sách liên kết chứa các chữ

số của nó Hãy tìm cách lưu trữ các chũa só của 1 số nguyên lớn theo ý tưởng trên sap cho viêc cộng 2 số nguyên lớn là dễ dàng thực hiện Viết chương trình con cộng 2 số nguyên lớn.

//cong hai so nguyen lon

void Cong(List &A,List &B,List &C)

Trang 17

//hien thi ngan xep

void Display(Stack &S)

Trang 18

//vao sau ra truoc (them vao dau danh sach)

void Push(Stack &S,int phantu)

//lay mot phan tu o dinh ngan xep

int Pop(Stack &S)

//doi 1 so thap phan sang nhi phan

void Thap2NhiPhan(Stack &S,long n)

Trang 19

Bài 19 vctc kiểm tra 1 chuỗi dấu ngoặc đúng (chuỗi dấu ngoặc đúng là chuỗi dấu

mở đóng khớp nhau như trong biểu thức toán học)

Bài 20 vctc kiểm tra 1 biểu thức được cho dưới dạng hậu tố có chuẩn không? (thông báo lỗi nếu không chuẩn ) giả sử mỗi toán hạng là 1 ký tự.

//nhap vao chuoi hau to

void Add_And_Insert(Stack &S)

//kiem tra chuoi hau to

void Check(Stack &S,Stack &K)

{

char c;int i;

while(!Emty(S)) //chuyen chuoi hau to ve dang 1,0

{ //toan hang(0,1, ,9) =1, toang tu(+-*/)=0

Trang 20

cout<<"\ntoan hang(0,1, ,9) =1, toang tu(+-*/)=0";

Display(K);

//kiem tra Node N,N+1,N+2 co dang 110 hay ko?

//neu co thi xoa N+1va N+2

cout<<"\nChuoi hau to nhap vao la dung";

else cout<<"\nChuoi hau to vua nhap vao sai";getch();

}

Bài 21 Cho 1 Stack S Hãy viets chương trình con thực hiện các công việc sau:

- Đếm số phần tử của Stack S

- Xuất nội dung phần tử thứ n của Stack S

- Xuất nội dung của Stack S

- Loại Phần tử thứ n của Stack S.

Trong các chương trình con trên yêu cầu bảo toàn thứ tứ các phần tử của Stack S.

//hien thi ngan xep

void Display(Stack &S)

Trang 21

int Count(Stack &S)

{

Stack K;Create(K);char c;int check=0;

while(!Emty(S)) //dem so phan tu cua ngan xep

//lay noi dung cua phan tu thu n

Stack K;Create(K);int kt=n;char c;

while(kt!=0)

{c=Pop(S); Push(K,c); kt ;}

cout<<"Phan tu thu "<<n<<"= "<<c;getch();

//tra lai ngan xep ban dau

//lay noi dung cua phan tu thu n

Stack K;Create(K);int kt=n;char c,tmp;

while(kt!=0)

{

c=Pop(S);

Trang 22

c=Pop(K);//bo di phan tu thu n

//tra lai ngan xep sau khi xoa

Trang 23

int Emty(Queue &Q)

{

return(Q.First->Right==Q.Last);

}

//hien thi ngan xep

void Display(Queue &Q)

//vao sau ra truoc (them vao dau danh sach)

void Push(Queue &Q,char phantu)

//lay mot phan tu o dinh hang doi

char Pop(Queue &Q)

//nhap vao cac phan tu cua ngan xep

void Add(Queue &Q)

{

char ch='1';

Trang 24

cout<<"\nNhap vao cac phan tu cua hang doi, nhan ENTER de ket thuc\n\t: ";

Queue K;Create(K);char c;int check=0;

while(!Emty(Q)) //dem so phan tu cua hang doi

//lay noi dung cua phan tu thu n

Queue K;Create(K);int kt=0;char c,tam;

while(!Emty(Q))

{c=Pop(Q); Push(K,c); kt++;if(kt==n)tam=c;}

cout<<"Phan tu thu "<<n<<"= "<<tam;getch();

//tra lai ngan xep ban dau

Trang 25

getch();return;

}

//lay noi dung cua phan tu thu n

Queue K;Create(K);int kt=n-1;char c,tmp;

Trang 26

Bài 23 Viết chương trình con đảo ngược 1 stack.

//dao nguoc mot stack

void DaoNguoc(Stack &S)

Trang 27

}

Bài 24 Viết chương trình con đảo ngược 1 Queue.

Bài 25 Dùng Stack và Queue để kiểm tra 1 chuỗi kí tự có đới xứng không?

Bài 26 Ta có thể cài đặt ngăn xếp trong cùng 1 mảng, gọi là ngăn xếp 2 đầu hoạt động của 2 ngăn xếp này theo sơ đồ sau:

Đáy ngăn xếp 1

Đỉnh(TOP) ngăn xếp 1

Phần mảng còn trống

Đỉnh(TOP) ngăn xếp 2

Đáy ngăn xếp 2 Hãy viết chương trình con cần thiết đẻ cài đặt ngăn xếp 2 đầu.

Trang 28

31 29

43 36

54

65

78 59

31 29

43 36

15

Trang 29

31 29

43 36

15

45

54 31

29

43 36

15

45

65

78 59

55

Trang 30

Câu38: Vẽ lại cây tìm kiếm nhị phân khi lần lượt

31 29

20

43 36

54

78 59

31

36

Trang 31

Xóa nút 54

Bài 39

Dựng cây tìm kiếm nhị phân ứng với dãy khóa : HAIPHONG,

CANTHO, NHATRANG, DALAT, HANOI, ANGIANG, MINHHAI, HUE,

SAIGON, VINHLONG

Đường đi trên cây khi tìm kiếm khóa: DONGTHAP

Đường đi là những mũi tên đậm

59

78 31

Ngày đăng: 01/12/2012, 08:39

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w