2. Một số phép toán trên danh sách: a. Khởi tạo một danh sách rỗng b. Kiểm tra một danh sách có rỗng không/ có đầy không c. Thêm một phần tử vào danh sách/ Lấy một phần tử ra khỏi danh sách d. Sắp xếp danh sách e. Tìm kiếm một phần tử xem có trong ds không Ôn lại về mảng - Khai báo mảng - Nhập dl cho mảng (từ bàn phím/ từ tệp/ gán sẵn) - Xuất mảng - Sắp xếp, tìm kiếm - Thêm một phần tử vào trước/ sau phần tử k - Xóa một phần tử khỏi mảng VD: 0 1 2 3 4 5 6 7 8 9 23 14 6 9 15 22 19 18 201 56 + Thêm x=34 vào trước phần tử thứ k=5 0 1 2 3 4 5 6 7 8 9 10 23 14 6 9 15 34 22 19 18 201 56 n=n+1; for (i=n-1;i>k;i--) a[i]=a[i-1]; a[k]=x; + Xóa một phần tử thứ k khỏi mảng 0 1 2 3 4 5 6 7 8 9 10 23 14 6 9 15 34 22 19 18 201 56 (n=11) Xóa phần tử a[5] khỏi mảng (k=5) 0 1 2 3 4 5 6 7 8 9 10 23 14 6 9 15 22 19 18 201 56 56 (n=10) n= n-1; x=a[5]; for (i=5;i<n;i++) a[i]= a[i+1]; cout<<”\n Mang sau khi xoa:\n”; for (i=0;i<n;i++) cout<<a[i]<<” “; 3. Cấu trúc dữ liệu ngăn xếp (Stack) Ngăn xếp là một danh sách đặc biệt trong đó phép Thêm vào hoặc Lấy ra một phần tử đều được thực hiện từ một đầu. Đầu này gọi là đỉnh của ngăn xếp (top). Nxep hđong theo ntac LIFO (Last In First Out) A. Cài đặt ngăn xếp bằng mảng - Định nghĩa kiểu DL ngăn xếp struct Stack { top: 0..max; type phantu[max]; }; Stack S; - Khởi tạo ngăn xếp rỗng void khoitao(Stack S) { S.top=-1;} - Kiểm tra nxep có rỗng ko int is_empty(Stack S) { if (S.top==-1) return 1; else return 0; } - Kiểm tra ngăn xếp đầy: int is_full(Stack S) { if (S.top==max) return 1; else return 0; } - Thêm một phần tử vào ngăn xếp void push(type x, Stack S) { if (is_full (S)==0) { S.top = S.top +1; S.phantu[top]=x; } } - Lấy một phần tử ra khỏi ngăn xếp void pop(Stack S, type &x) { if (is_empty(S)==0) x=S.phantu[top]; S.top--; } Áp dụng: Viết ctrinh chuyển 1 số n ở hệ 10 sang hệ 2 (sử dụng ngăn xếp) #include<iostream.h> const int max=100; struct Stack { int top; int phantu[max]; }; void khoitao(Stack S) { S.top = -1; } int is_empty(Stack S) { if (S.top==-1) return 1; else return 0; } int is_full(Stack S) { if (S.top==max) return 1; else return 0; } void push (int x, Stack S) { if (is_full(S)==0) {S.top++; S.phantu[S.top]=x;} } void pop(Stack S, int &x) { if (is_empty(S)==0) { x=S.phantu[S.top]; S.top--;} } int main() { nhập số cần chuyển ; Lặp (chừng nào số !=0) dư = số % 2; số= số/2; push (dư, S); while (is_empty(S)==0) { pop(S,x); cout<<x<<" "; } }