Nguyễn Thanh HiênDanh Sách Liên Kết Linked List • Gồm nhiều phần tử gọi mỗi phần tử là... • typedef struct node {T info; // T là kiểu đã định nghĩa trước struct node* link; // con trỏ ch
Trang 1Nguyễn Thanh Hiên
Danh Sách Liên Kết (Linked List)
• Gồm nhiều phần tử (gọi mỗi phần tử là
Trang 2• Khởi tạo ( init )
Trang 3• typedef struct node {
T info; // T là kiểu đã định nghĩa trước
struct node* link; // con trỏ chỉ đến cấu trúc node
}NODE ;
• T là kiểu dữ liệu cơ bản hoặc kiểu dữ liệu
tự định nghĩa
DSLK Đơn- Cấu trúc dữ liệu
• typedef struct node
{
struct node* link;
} NODE ; CTDL cho một phần tử của DS
các số nguyên
Trang 4• typedef struct SinhVien
DSLK Đơn- Cấu trúc dữ liệu
• typedef struct phanso
Trang 6• T ạo một Node mới cho DS
– Chèn vào đầu ( insertHead )
– Chèn vào cuối ( insertTail )
– Chèn sau phần tử q ( insertMid )
Trang 7• Chèn vào đầu ( insertHead )
pTail pHead
x
newNode
(1) (2)
DSLK Đơn- Các Tác Vụ
void insertHead(LIST&ds, NODE* newNode)
Trang 8• Chèn vào cu ối ( insertTail )
DSLK Đơn- Các Tác Vụ
• Chèn vào cu ối ( insertTail )
void insertTail(LIST&ds, NODE*newNode)
Trang 13ds.pHead = p->link;
if(ds.pHead == NULL)
ds.pTail = NULL;
} return 1;
}
Trang 14void ReamoveList(LIST&ds)
struct DNode* pPre;
struct DNode* pNext;
}DNODE;
Trang 18in whichstack grows
•Danh sách hạn chế
•Các phần tử được thêm vào và lấy ra ở đỉnh stack
• Hiện thực dùng dslk hoặc array
Trang 19void push ( STACK &s, T x){
bool isFull( STACK s) {
if(s.top < s.size-1) return false;
else return true;
}
Stack- Pop(), Top()
T pop( STACK &s){
bool isEmpty( STACK s) {
if(s.top == -1) return true;
else return false;
Trang 2056 31 29 179 2push(2)
56 31 29 179 2
Return 2
toptop
Return 52
top()
Queue
• Danh sách hạn chế
• Chèn vào một đầu, lấy ra ở đầu kia
• Hiện thực dùng dslk hoặc array
• Linear and Circular Queues
of the queue
12 31 79 5 63
Trang 2217 52 23front back
Trang 24EnQueue-> Queue full:
(back +1)%size == front
Trang 25void init( QUEUE &q, int size) {
else return false;
}
if (q.back == q.front) return true;
else return false;
}
Trang 26Path: n1->nklà một chuỗi các nút n1->nksao cho nilà cha ni+1, 1 <= i <=k
depth
Trang 28• PreOrder
– Duyệt gốc
– Duyệt các cây con bên trái
– Duyệt cây con bên phải
– Duyệt cây con bên trái
– Duyệt cây con bên phải
Trang 29void PreOrder(TNODE*root){
VÍ DỤ
• Cho cây nhị phân, mỗi nút có info (không trùng
nhau) là một số nguyên
– Đếm số nút trên cây
– Tính tổng các info trên cây
– Cho biết tổ tiên của nút có info là x
– Cho biết info các nút ở mức 3
– Cho biết tổng info trên cây
– Cho biết các nút có tổng info các conlà bội số của info
của cha nó
– Cho biết tổng số nút lá
– Cho biết tổng số nút bậc một
Trang 31TNODE*Retrieval(TNODE* root, Tx){
Trang 32• Tạo BSTvới các info: 5 9 7 3 8 12 6 4 20
BST-Insert
Trang 33BST-Insert
Trang 34root ->right = NULL;
root ->left = NULL:
root ->info = x;
return 1;
}