You are on page 1of 10

Chương 4: Cấu trúc dữ liệu Danh sách

1. Khái niệm danh sách (BG)


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<<" ";
}
}

You might also like