You are on page 1of 4

Ôn tập CTDL&GT

1.Sort & SearchSearch:


1.1/Linear Search (O(n)):
Bước 1: Khởi gán i=0;
Bước 2: So sánh a[i] với giá trị x cần tìm, có 2 khả năng
+ a[i] == x tìm thấy x. Dừng;
+ a[i] != x sang bước 3;
Bước 3: i=i+1 // Xét tiếp phần tử kế tiếp trong mảng
Nếu i==N: Hết mảng. Dừng;
Ngược lại: Lặp lại bước 2;

1.2/Binary Search(dãy đã được sắp xếp) O(


log 2
N):  
:
 Giả sử dãy tìm kiếm hiện hành bao gồm các phần tử nằm trong aleft, aright, các bước
của giải thuật như sau:
 Bước 1: left=0; right=N-1;
 Bước 2: 
 mid=(left+right)/2; //chỉ số phần tử giữa dãy hiện hành
 So sánh a[mid] với x. Có 3 khả năng
 a[mid]= x: tìm thấy. Dừng
 a[mid]>x :  Right= mid-1; 
 a[mid]<x : Left= mid+1;
 Bước 3: Nếu Left <=Right ; //  còn phần tử trong dãy hiện
hành
+ Lặp lại bước 2
Ngược lại : Dừng

A[]={3,7,1,5,2,4}

2.List:
2.1/Linked List

2.2/Doubly Linked List

2.3/Circular Linked List

3.Queue & Stack:


3.1/Stack(LIFO):
Các thao tác cơ bản trên stack:
● push(item): Thêm một phần tử vào ngăn xếp đầu.
● pop(): Lấy phần tử đầu tiên ra khỏi ngăn xếp.
● peek(): Truy cập phần tử đầu tiên của ngăn xếp mà không xóa nó.
● is_empty(): Kiểm tra xem stack có rỗng hay không.
● isFull: Kiểm tra xem stack có đầy đủ hay không.
Ứng dụng của Stack:
● Đảo ngược chuỗi hoặc mảng.
● Kiểm tra tính đúng đắn của biểu thức toán học.
● Thực hiện các thao tác trên cây hoặc đồ thị, ví dụ như duyệt cây theo thứ tự sâu trước
(duyệt theo chiều sâu).
● Lưu trữ trạng thái của một ứng dụng trong quá trình thực thi.
Đối với việc triển khai ngăn xếp, có thể sử dụng danh sách liên kết thay vì mảng. Sử dụng
danh sách liên kết có thể giúp giải quyết vấn đề về kích thước của mảng cố định và có thể
thêm hoặc xóa các phần tử một cách linh hoạt hơn.

Trong quá trình khai thác Stack bằng danh sách liên kết, mỗi phần tử trong Stack sẽ được
lưu trữ trong một nút trong danh sách liên kết. Nút đầu tiên trong danh sách liên kết sẽ đại
diện cho phần tử đầu tiên được thêm vào Stack và nút cuối cùng sẽ đại diện cho phần tử
cuối cùng được thêm vào Stack.

Các thao tác push, pop và peek trên Stack có thể được khai thác bằng các phương thức
tương ứng trên danh sách liên kết. Khi thêm một phần tử mới vào Stack, ta có thể thêm
một nút mới vào đầu danh sách liên kết. Khi lấy ra một phần tử từ Stack, ta có thể xóa nút
đầu tiên của danh sách liên kết và trả về giá trị của phần tử đó. Khi lấy giá trị của phần tử
ở đỉnh của Stack, ta có thể truy cập giá trị của nút đầu tiên trong danh sách liên kết mà
không làm thay đổi danh sách.

Tóm lại, việc sử dụng danh sách liên kết để khai thác Stack có thể giúp giải quyết một số
vấn đề về kích thước mảng cố định và có thể cho phép thêm hoặc xóa các phần tử một
cách linh hoạt hơn.
CODE:
#include <iostream>
using namespace std;

struct Node {
int data;
Node* next;
};

Node* top = NULL;

void push(int x) {
Node* temp = new Node();
temp->data = x;
temp->next = top;
top = temp;
}

int pop() {
if (top == NULL) {
cout << "Stack Underflow" << endl;
return -1;
}
Node* temp = top;
int x = temp->data;
top = top->next;
delete temp;
return x;
}

int peek() {
if (top == NULL) {
cout << "Stack Underflow" << endl;
return -1;
}
return top->data;
}

bool is_empty() {
return top == NULL;
}
int main() {
push(1);
push(2);
push(3);
cout << "Top element: " << peek() << endl;
cout << "Popped element: " << pop() << endl;
cout << "Top element: " << peek() << endl;
return 0;
}

3.2/Queue(FIFO):

4.Tree:
4.1/Binary Insertion Tree( Cây “Shine” Phân Tìm Kiếm”)

4.2/BTree:

4.3/AVL

5.Hash Table:

You might also like