1. Trang chủ
  2. » Giáo án - Bài giảng

THỰC HÀNH CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT

45 1,2K 3

Đ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 45
Dung lượng 1,12 MB

Nội dung

NODE* GetNodePointerLIST l, DATA info; NODE* GetPreviousNodePointerLIST l; void AddHeadLIST &l; NODE* AddHeadLIST &l, DATA info; void AddTailLIST &l; NODE* AddTailLIST &l, DATA info; NOD

Trang 1

THỰC HÀNH CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT -CẤU TRÚC -

// CauTrucNgay.cpp : Defines the entry point for the console application

typedef struct ngay NGAY;

// Nguyen mau ham

void Nhap(NGAY &ng);

NGAY TinhNgayHomTruoc(NGAY ng);

NGAY TinhNgayHomSau(NGAY ng);

Trang 2

printf("Nam %d khong la nam nhuan\n", ng1.nam);

printf("Ngay 1 la ngay thu %d trong nam %d\n", TinhSTTNgayTrongNam(ng1), ng1.nam);

printf("Ngay 1 la ngay thu %d ke tu 1/1/1\n", TinhSTTNgay(ng1));

Xuat(TinhNgayHomTruoc(ng1), "Ngay hom truoc cua Ngay 1 la: ");

Xuat(TinhNgayHomSau(ng1), "Ngay hom sau cua Ngay 1 la: ");

Trang 3

// Dinh nghia ham

Trang 5

// Tinh tong so ngay cac thang truoc do

for (int i=1; i<ng.thang; i++)

// Tinh tong so ngay cac nam truoc do

for (int i=1; i<ng.nam; i++)

Trang 6

} }

Trang 7

if (ng.ngay == max) // Ngay cuoi cung cua thang

Trang 8

for (int i=0; i<k; i++)

Trang 9

// TamGiac.cpp : Defines the entry point for the console application.

//Cấu trúc dữ liệu tam giác

typedef struct tamgiac TAMGIAC;

// Nguyen mau ham

void NhapDiem(DIEM &d);

float TinhKhoangCach(DIEM d1, DIEM d2);

void NhapTamGiac(TAMGIAC &tg);

float TinhChuVi(TAMGIAC tg);

float TinhDienTich(TAMGIAC tg);

Trang 10

{

TAMGIAC tg;

NhapTamGiac(tg);

XuatTamGiac(tg, "Toa do ba diem cua Tam giac:\n");

printf("Chu vi Tam giac = %.2f\n", TinhChuVi(tg));

printf("Dien tich Tam giac = %.2f\n", TinhDienTich(tg)); getch();

}

// Dinh nghia ham

void NhapDiem(DIEM &d)

Trang 11

XuatDiem(tg.dA, "- Toa do Diem A: ");

XuatDiem(tg.dB, "- Toa do Diem B: ");

XuatDiem(tg.dC, "- Toa do Diem C: ");

Trang 13

// Diem.cpp : Defines the entry point for the console

typedef struct diem DIEM;

// Nguyen mau ham

void Nhap(DIEM &d);

float TinhKhoangCach(DIEM d1, DIEM d2);

Xuat(d2, "Toa do Diem 2: ");

printf("Khoang cach giua 2 diem = %.2f\n",

TinhKhoangCach(d1, d2));

Trang 14

Xuat(TimDoiXungQuaGoc(d1), "Toa do diem doi xung qua goc cua Diem 1: ");

Xuat(TimDoiXungQuaOx(d1), "Toa do diem doi xung qua Ox cua Diem 1: ");

Xuat(TimDoiXungQuaOy(d1), "Toa do diem doi xung qua Oy cua Diem 1: ");

getch();

}

// Dinh nghia ham

void Nhap(DIEM &d)

Trang 16

// DaThuc.cpp : Defines the entry point for the console

// Khai bao kieu DATHUC

// anx^n + an-1x^n-1 + + a1x + a0

typedef struct dathuc DATHUC;

// Nguyen mau ham

void Nhap(DATHUC &dt);

DATHUC Tong(DATHUC dt1, DATHUC dt2);

DATHUC Hieu(DATHUC dt1, DATHUC dt2);

DATHUC Tich(DATHUC dt1, DATHUC dt2);

DATHUC DaoHamCap1(DATHUC dt);

float TinhGiaTri(DATHUC dt, float x0);

Trang 17

Nhap(dt2);

Xuat(dt2, "Da thuc 2: ");

Xuat(Tong(dt1, dt2), "Da thuc 1 + Da thuc 2 = ");

Xuat(Hieu(dt1, dt2), "Da thuc 1 - Da thuc 2 = ");

Xuat(Tich(dt1, dt2), "Da thuc 1 * Da thuc 2 = ");

Xuat(DaoHamCap1(dt1), "Dao ham cap 1 cua Da thuc 1 = ");

// Dinh nghia ham

Trang 18

for (int i=0; i<=kq.n; i++)

kq.a[i] = dt1.a[i] + dt2.a[i];

while (kq.n>0 && kq.a[kq.n] == 0)

kq.n ;

Trang 19

for (int i=0; i<=kq.n; i++)

kq.a[i] = dt1.a[i] - dt2.a[i];

while (kq.n>0 && kq.a[kq.n] == 0)

kq.a[i+j] = kq.a[i+j] + dt1.a[i] * dt2.a[j];

while (kq.n>0 && kq.a[kq.n] == 0)

kq.n ;

return kq;

}

Trang 20

for (int i=kq.n; i>=0; i )

kq.a[i] = dt.a[i+1] * (i+1);

for (int i=dt.n; i>=0; i )

kq = kq + dt.a[i] * pow(x0, i);

return kq;

}

Trang 21

-DANH SÁCH LIÊN KẾT - // DeMoDSLK.cpp : Defines the entry point for the console application.

typedef struct list LIST;

void InitList(LIST &l);

NODE* CreateNode(DATA info);

Trang 22

NODE* GetNodePointer(LIST l, DATA info);

NODE* GetPreviousNodePointer(LIST l);

void AddHead(LIST &l);

NODE* AddHead(LIST &l, DATA info);

void AddTail(LIST &l);

NODE* AddTail(LIST &l, DATA info);

NODE* AddAfter(LIST &l, NODE*q, DATA info);

void AddBefore(LIST &l, NODE*q);

NODE* AddBefore(LIST &l, NODE*q, DATA info);

NODE* AddAscendingList(LIST &l, DATA info);

DATA RemoveHead(LIST &l);

DATA RemoveTail(LIST &l);

DATA RemoveAfter(LIST &l, NODE*q);

void RemoveAll(LIST &l);

Trang 23

// 01 Hàm so sánh 2 biến kiểu cấu trúc cho trước

// Đầu vào: biến cấu trúc (info1) và biến cấu trúc (info2)// Đầu ra: 0 (bằng nhau), -1 (info1 nhỏ hơn info2), 1 (info1 lớn hơn info2)

// Đầu vào: tham chiếu đến DSLK cẩn khởi tạo (1)

// Đầu ra: Không có

void InitList(LIST &l)

// Đầu vào: DSLK cần kiểm tra (1)

// Đầu ra: DSLK rỗng hay không (true/false)

Trang 24

// 05 Hàm tạo một node mới với dữ liệu cho trước

// Đầu vào: Dữ liệu của nút (info)

// Đầu ra: Con trỏ đến nút đó (trả về NULL nếu không tạo được)

// Đầu vào: DSLK (l), dữ liệu của nút cần tìm (info)

// Đầu ra: Con trỏ đến nút tìm được (trả về NULL nếu

// 07 Hàm tìm nút có chỉ số (bắt đầu từ 0) cho trước

// Đầu vào: DSLK (l), chỉ số của nút cần lấy (index)

// Đầu ra: Con trỏ đến nút tìm được (trả về NULL nếu

không tìm được)

Trang 26

// Đầu vào: DSLK (l), con trỏ đến nút cho trước (pNode)// Đầu ra: Con trỏ đến nút tìm được (trả về NULL nếu

không tìm được)

NODE* GetPreviousNodePointer(LIST l, NODE *p)

{

NODE *pPreviousNode = l.pHead;

while (pPreviousNode != NULL && pPreviousNode->pNext != p)

pPreviousNode = pPreviousNode->pNext;

return pPreviousNode;

}

// 10 Hàm chèn một nút cho trước vào đầu DSLK

// Đầu vào: Tham chiếu đến DSLK (l), con trỏ đến nút cần chèn (pNewNode)

void AddHead(LIST &l, NODE *p)

// Đầu ra: Con trỏ đến nút được chèn (trả về NULL nếu không chèn được)

NODE* AddHead(LIST &l, DATA info)

{

NODE*p = CreateNode(info);

Trang 27

if (p != NULL)

AddHead(l, p);

return p;

}

// 12 Hàm chèn một nút cho trước vào cuối DSLK

// Đầu vào: Tham chiếu đến DSLK (l), con trỏ đến nút cần chèn (pNewNode)

void AddTail(LIST &l, NODE *p)

// Đầu ra: Con trỏ đến nút được chèn (trả về NULL nếu không chèn được)

NODE* AddTail(LIST &l, DATA info)

Trang 28

// Đầu vào: Tham chiếu đến DSLK (l), con trỏ đến nút cho trước (q), con trỏ đến nút cần chèn (pNewNode)

{

{

Trang 30

// Đầu vào: Tham chiếu đến DSLK (l)

// Đầu ra: Dữ liệu của nút bị xóa (nếu có)

DATA RemoveHead(LIST &l)

Trang 31

}

// 21 Hàm hủy một nút đứng sau một nút cho trước trong DSLK// Đầu vào: Tham chiếu đến DSLK (l), con trỏ đến nút cho trước (q)

// Đầu ra: Dữ liệu của nút bị xóa (nếu có)

DATA RemoveAfter(LIST &l, NODE *q)

return info;

}

// 22 Hàm hủy một nút cuối DSLK

// Đầu vào: Tham chiếu đến DSLK (l)

// Đầu ra: Dữ liệu của nút bị xóa (nếu có)

DATA RemoveTail(LIST &l)

Trang 32

NODE *q = GetPreviousNodePointer(l, l.pTail);

return RemoveAfter(l, q);

} }

return info;

}

// 23 Hàm hủy một nút có dữ liệu cho trước trong DSLK

// Đầu vào: Tham chiếu đến DSLK (l), dữ liệu của nút cần xóa (info)

// Đầu ra: Tìm thấy nút có dữ liệu info hay không

(true/false)

{

NODE *p = GetNodePointer(l, info);

bool flag = false;

} }

return flag;

}

Trang 33

// 24 Hàm hủy toàn bộ DSLK cho trước

// Đầu vào: Tham chiếu đến DSLK (l)

void RemoveAll(LIST &l)

PrintList(l, "Chen nut 8 vao dau:\t\t");

// Chèn nút có giá trị 9 vào đầu dslk

info.x = 9;

NODE *q = AddHead(l, info);

PrintList(l, "Chen nut 9 vao dau:\t\t");

// Chèn nút có giá trị 10 vào đầu dslk

Trang 34

info.x = 10;

AddHead(l, info);

PrintList(l, "Chen nut 10 vao dau:\t\t");

// Chèn nút có giá trị 999 vào cuối dslk

info.x = 999;

AddTail(l, info);

PrintList(l, "Chen nut 999 vao cuoi:\t\t");

// Chèn nút có giá trị 789 vào cuối dslk

info.x = 789;

AddTail(l, info);

PrintList(l, "Chen nut 789 vao cuoi:\t\t");

// Chèn nút có giá trị 111 vào sau nút q (nút có giá trị

9 ở trên)

info.x = 111;

AddAfter(l, q, info);

PrintList(l, "Chen nut 111 vao sau nut 9:\t");

// Chèn nút có giá trị 123 vào trước nút q (nút có giá trị 9 ở trên)

info.x = 123;

AddBefore(l, q, info);

PrintList(l, "Chen nut 123 vao truoc nut 9:\t");

// Xóa nút đầu tiên

info = RemoveHead(l);

PrintList(l, "Xoa nut dau tien:\t\t");

printf("Gia tri cua nut bi xoa:\t",info.x);

// Xóa nút cuối cùng

info = RemoveTail(l);

PrintList(l, "Xoa nut cuoi cung:\t\t");

printf("Gia tri cua nut bi xoa:\t",info.x);

// Xóa nút sau nút q (nút có giá trị 9 ở trên)

info = RemoveAfter(l, q);

PrintList(l, "Xoa nut sau nut 9:\t\t");

Trang 35

printf("Gia tri cua nut bi xoa:\t",info.x);

// Xóa nút có giá trị cho trước

printf("Nhap gia tri nut can xoa:");

Trang 36

getch()

}

Trang 37

cot va duong cheo deu trong

len hang j

cac hoang hau tren ban co khi thanh cong

{

Trang 38

// Ham dat hoang hau j len hang j

Trang 39

lai dat quan hau tiep theo

// Du thanh cong hay that bai deu quay lai de tim loi giai moi

// <=> phuc hoi trang thai truoc khi dat hoang hau j

cottrong[i] = TRUE;

cheoxuoitrong[j-i+KICHTHUOC-1] = TRUE;

cheonguoctrong[j+i] = TRUE;

} }

// Ham in tat ca vi tri cac hoang hau tren ban co khi thanh cong

Trang 40

printf("\n\n");

}

Trang 41

// MaDiTuan.cpp : Defines the entry point for the console application.

nuoc di tren ban co

Trang 42

nuocdi(2, j, i); // Nuoc di thu 2 xuat phat

tu o (j, i)

} }

// Xoa het nuoc di tren ban co

// Ham tim nuoc di thu n, xuat phat tu o (y, x)

void nuocdi(int n, int y, int x)

{

for (int i=0; i<8; i++) // 8 nuoc di co the

{

// Chon thu huong di thu i (trong 8 huong di)

// Neu huong di nay hop le va tai vi tri do chua co nuoc di nao

if (ymoi>=0 && ymoi<KICHTHUOC && xmoi>=0 &&

xmoi<KICHTHUOC && banco[ymoi][xmoi] == 0)

tim nuoc di ke tiep

Trang 43

// Du thanh cong hay that bai deu quay lai de tim loi giai moi

// <=> phuc hoi trang thai truoc khi di nuoc

di thu n

banco[ymoi][xmoi] = 0;

} }

}

// In cac nuoc di cua con ma

Trang 44

// BAITOANTHAPHANOI.cpp : Defines the entry point for the console application.

// Ham chuyen n dia cotA -> cotC (trung gian cotB)

void hanoi(int n, char cotA, char cotB, char cotC);

// Ham chuyen n dia cotA -> cotC (trung gian cotB)

void hanoi(int n, char cotA, char cotB, char cotC)

{

printf("Buoc %d Chuyen dia 1 tu cot %c sang cot

%c\n", ++buoc, cotA, cotC);

else

{

// Chuyen n-1 dia cotA -> cotB (trung gian C)

hanoi(n-1, cotA, cotC, cotB);

// Chuyen 1 dia cotA -> cotC

Trang 45

printf("Buoc %d Chuyen dia %d tu cot %c sang cot

%c\n", ++buoc, n, cotA, cotC);

// Chuyen n-1 dia cotB -> cotC (trung gian A)

hanoi(n-1, cotB, cotA, cotC);

}

}

Ngày đăng: 08/06/2014, 07:10

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w