thì màn hình.. node trên cây.
Trang 1Biên
www.hutech.edu.vn
Trang 2*1.2019.COS321*
tailieuhoctap@hutech.edu.vn
Trang 3I III
1
1.1 TÓM LÝ 1
1
1
1.2 HÀNH 2
2
3
1.3 HÀNH NÂNG CAO 6
7
2.1 TÓM LÝ 7
7
7
2.2 HÀNH 7
7
9
2.3 HÀNH NÂNG CAO 10
SÁCH DANH S 11
3.1 TÓM LÝ 11
11
12
3.2 HÀNH 13
13
17
3.3 HÀNH NÂNG CAO 19
E VÀ STACK 20
4.1 TÓM LÝ 20
20
4.1.2 Queue (h i) 20
4.2 HÀNH 21
21
23
24
5.1 TÓM LÝ 24
24
5.1.2 Các thao tác 25
Trang 45.2 HÀNH 25
5 25
27
30
6.1 TÓM LÝ 30
30
31
32
6.2 HÀNH 32
6.3 TRA HÀNH 41
TÀI THAM 42
Trang 5M
h nâng cao
- Các gi i thu t tìm ki m và s p x p trên danh sách
tr ng vào ki u d li u danh sách liên k t
- C u trúc d li u Stack và m t s bài toán ng d ng th c t c a Stack
- C u trúc d li u Queue và m t s bài toán ng d ng th c t c a Queue
- C u trúc d li u cây: cây nh phân, cây nh phân tìm ki m, cây nh phân tìm ki m cân b ng
Trang 6- m thi: 50% Hình th c bài thi th c hành N i dung g m các bài t p liên quan
Trang 7này là khóa (key)
- Tìm ki m tu n t (tuy n tính) trên t p d li u b t k
Trang 9BÀI 1: 3
}
// -
int TimTuyenTinh(int a[], int n, int X){ }
void SapXep(int a[], int n){ }
int TimNhiPhan(int a[], int n, int X){ }
if (vt==-1) printf("Khong tim thay");
else printf("Tim thay %d tai vi tri %d",X, vt);
X
sapxep(a,n);
printf("Mang sau khi sap tang dan:"); XuatMang(a,n);
printf("Nhap gia tri can tim: "); scanf("%d", &X);
Trang 10void nhapn(int &n)
void nhapDS(Sach a[], int n)
void xuatDS(Sach a[], int n)
int timTuanTu(Sach a[], int n, int X)
int timNhiPhan(Sach a[], int n, int X)
- Hàm nh p 1 cu n sách: nh p thông tin cho 1 cu n sách
void nhap1Sach(Sach &x)
- Hàm xu t 1 cu n sách: xu t thông tin c a 1 cu n sách
void xuat1Sach(Sach x)
Trang 11- Hàm tìm cu n sách mã là X: Làm theo hai cách tìm tuy n tính và nh phân
int timTuanTu(Sach a[], int n, int X)
int timNhiPhan(Sach a[], int n, int X)
hàm tìm)
- Hàm xu t ra các cu n sách có tên là Y: Duy t danh sách, n u g p cu n nào có
- Hàm tìm cu n sách giá l n nh t:
Trang 14c
d
- Sinh m ng: s d ng n <stdlib.h> và <string.h>
void SinhMang (int a[], int n)
printf 3: Interchange Sort\n
Trang 17DSLK VÒNG
Trang 183.1.2 C u trúc danh sách liên k
a
- Ph n ch a d li u Info (ho c Data)
- Ph n ch v trí ( a ch ) c a ph n t ti p theo trong danh sách Next
Trang 20typedef struct node Node;
- Vì danh sách có m i ph n t là m t s nguyên nên ki u d li u c a info là int
void init (Node* &phead)
g: int isEmpty(Node* phead) Node* createNode(int x)
void insertFirst(Node* &phead, int x)
void insertLast(Node* &phead, int x)
void showList(Node* phead)
printf("Nhap so luong phan tu: "); scanf("%d", &n);
for(int i=0; i<n; i++)
Trang 21BÀI 3: 15
qu và cho nh n xét
insertLast(phead, x), ch y th v i n=3, thêm l t x= 1, x=2, và x=3 Quan sát k t qu và cho nh n xét
Trang 22system(cls);
Trang 24typedef struct node Node;
là m t sinh viên nên ki u d li u c a info là SV)
nhap1SV(SV &x)
xuat1SV(SV x)
: void init (Node* &phead)
int isEmpty(Node* phead)
Node* createNode(SV x)
void insertFirst(Node* &phead, SV x)
void insertLast(Node* &phead, SV x)
- Nh p danh sách sinh viên theo cách 1:
void inputList(Node* &phead)
{
int n;
printf("Nhap so luong sinh vien:"); scanf("%d", &n);
for(int i=0; i<n; i++)
Trang 25BÀI 3: DANH SÁCH LIÊ 19
3.3 TH C HÀNH NÂNG CAO
:
- Xóa m t sinh viên sau sinh viên có mã là X
- Xóa t t c các sinh viên có tên là X
nguyên
Bài 2:
Trang 26Stack Trên Stack các Stack
Out)
Hai thao tác chính trên Stack:
trúc FIFO (First In First Out) Hai thao tác chính trên hàng :
- insert thêm nút m i vào cu i hàng i
Trang 27typedef struct node
{
struct node * next;
}Node;
typedef Node* STACK;
Trang 28o void Push(STACK &s, DataType x)
s
void Convert(int n, Stack &s){
void Output(Stack s){
{
; }
Trang 29ch
Trang 31BÀI 5: 25
:
- Giá tr c a t t c nút con trái < giá tr c
- Giá tr c a t t c nút con ph i > giá tr c
typedef struct node
{
int info;
Trang 32struct node * left;
struct node * right;
} Node;
- Bi n qu n lý cây: Node* proot; //pTree gi nút g c c a cây
void CreateTree(Node* & proot, int a[], int begin, int end ) {
CreateTree(proot ->left, a, begin, i-1);
CreateTree(proot ->right, a, i+1, end);
}
//trong hàm main() : begin=0, end=n-1 ;
Trang 33struct node *left;
struct node *right;
}Node;
void Init(Node* &proot){ proot=NULL ;}
Node* CreateNode(int x){
NODEPTR p=new Node;
p->info=x; p->left=NULL; p->right=NULL;
Trang 34rp = rp->left; //rp qua bên trái
khi rp là nút có nút con trái là null p->info = rp-
Trang 35BÀI 5: 29
c
Trang 37BÀI 6: 31
- Tác v tìm ki m: y là m t trong nh ng tác v th ng c s d ng nh t c a
b ng b m Tác v này s tìm ki m các ph n t trong b ng b m d a vào khoá c a
t ng ph n t
- Tác v thêm m t ph n t :Tác v này thêm m t ph n t m i vào b ng b m
ch khác nhau, nh ng th c t thì th ng x y ra tr ng h các khoá khác nhau l
- B v ng pháp n i k t tr c ti p: m i a ch c a b ng b m t ng ng
v i m t danh sách liên k t Các nút b xung t c n i k t v i nhau trên m t danh sách liên k t
k t next
a ch tr ng u tiên thì thêm nút vào a ch này
Trang 386.1.3
- Khoá có th là khoá d ng s hay d ng chu i
tìm ki m nút trên b ng b m quy v bài toán tìm ki m trên danh sách liên k t
Trang 40// khoi tao bang bam
Trang 42//Ham hash function
int hashfunc(int key){
return (key % M);
}
//them mot node vao dau bucket
void push(int b, int x){
Trang 43//tac vu them vao bucket mot node moi sau node p
void insafter(NODEPTR p, int k){
// tac vu nay chi su dung khi them vao mot bucket co thu tu
void place(int b, int k){
Trang 45printf("\n\n CAC CHUC NANG CUA CHUONG TRINH");
printf("\n 1: Them mot node vao bang");
printf("\n 2: Them ngau nhien nhieu node vao bang bam");
printf("\n 3: Xoa mot node trong bang bam");
printf("\n 4: Xoa toan bo bang bam");
Trang 46printf("\n 5: Duyet bang bam");
printf("\n 6: Tim kiem tren bang bam");
printf("\n 0: ket thuc chuong trinh");
printf("\n chuc nang ban chon: ");
scanf("%d",&chucnang);
switch(chucnang){
case 1:{
printf("\n Them mot node vao trong bang bam");
printf("\n Nhap vao khoa cua node can them vao: ");
scanf("%d",&key);
insert(key);
break;
} case 2:{
printf("\n them mot bang ngau nhien nhieu node vao bang"); printf("\n So node ban muon them: ");
} case 3:{
printf("\n Xoa mot node tren bang bam");
printf("\n Nhap vao khoa cua node can xoa: ");
scanf("%d",&key);
remove(key);
break;
} case 4:{
clear();
Trang 47BÀI 6: 41
break;
} case 5:{
printf("\n Duyet Bang Bam");
traverse();
break;
} case 6:{
printf("\n Tim kiem mot khoa tren bang bam");
printf("\n Khoa can tim: ");
scanf("%d",key);
b=search(key);
if(b==-1) printf(" Khong thay");
else printf(" Tim thay trong bucket %d",b);
break;
} }
}while(chucnang !=0);
}
6.3 KI M TRA TH C HÀNH
Trang 481
2
TPHCM
3 Lê Minh Hoàng (1999 - 2002)
4 Richard Neapolitan and Kumarss (2004) Foundations of Algorithms Using C++ Pseudocode Jones and Bartlett Publishers
5
6