You are on page 1of 79

TRƯỜNG ĐẠI HỌC NGÂN HÀNG TP HCM

KHOA HỆ THỐNG THÔNG TIN QUẢN LÝ

Chương 3

DANH SÁCH - LIST


1
Khoa Hệ Thống Thông Tin Quản lý

Nội dung

 Giớ i thiệu
 Phâ n loạ i: Danh sá ch đặ c & danh sá ch liên kết
 Khá i niệm về danh sá ch liên kết
 Sự khá c biệt giữ a danh sá ch liên kết và mả ng
 Mộ t số loạ i danh sá ch liên kết thườ ng gặ p
 Cá c thao tá c trên danh sá ch liên kết đơn
 Ngă n xếp
 Hà ng đợ i

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 2


Khoa Hệ Thống Thông Tin Quản lý

Giới thiệu về danh sách

 Danh sá ch là tậ p hợ p cá c phầ n tử có kiểu dữ liệu


xá c định và giữ a chú ng có mộ t mố i quan hệ nà o đó
 Số phầ n tử củ a danh sá ch gọ i là chiều dà i củ a DS
 Danh sá ch có chiều dà i bằ ng 0 gọ i là DS rỗ ng
Cá c phép toá n:
- Tạ o mớ i danh sá ch  Create
- Thêm mộ t phầ n tử và o danh sá ch  Insert
- Tìm kiếm 1 phầ n tử trong danh sá ch  Search
- Loạ i bỏ 1 phầ n tử khỏ i danh sá ch  Remove
- Cậ p nhậ t 1 phầ n tử trong danh sá ch  Update
- Sắ p xếp cá c phầ n tử trong danh sá ch  Sort
- Kết hợ p cá c danh sá ch thà nh 1 danh sá ch  Join
- Hủ y danh sá ch…  Delete
GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 3
Khoa Hệ Thống Thông Tin Quản lý

Phân loại

 Danh sá ch đặ c (kề)
 Danh sá ch liên kết

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 4


Khoa Hệ Thống Thông Tin Quản lý

Khái niệm về danh sách đặc


• Danh sá ch đặ c là danh sá ch mà khô ng gian bộ nhớ
lưu trữ cá c phầ n tử đượ c đặ t liên tiếp nhau.
• Mả ng là cấ u trú c bao gồ m cá c thà nh phầ n cù ng kiểu
dữ liệu, mỗ i thà nh phầ n đượ c gọ i là phầ n tử và xá c
định qua chỉ số .
Trong C/C++ khai bá o:
elem A[spt]  int A[10]
Trong đó : elem là kiểu phầ n tử (element type); spt
là số phầ n tử .
Ví dụ:
int a[10]; //mả ng a gồ m 10 phầ n tử kiểu int
float b[20]; //mả ng b gồ m 20 phầ n tử kiểu float

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 5


Khoa Hệ Thống Thông Tin Quản lý

Khái niệm về danh sách đặc

• Mả ng đượ c quả n lý bằ ng mộ t địa chỉ trong bộ nhớ


máy tính và cá c phầ n tử đượ c bố trí tuầ n tự liên
tiếp theo chỉ số .
0 1 2 9
A

• Chính vì vậy dãy dữ liệu lưu trữ trong mả ng cò n


đượ c gọ i là danh sá ch đặ c

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 6


Khoa Hệ Thống Thông Tin Quản lý

Ưu và nhược của danh sách đặc

• Ưu điểm
– Mậ t độ sử dụ ng 100%
– Dễ dà ng truy xuấ t đến từ ng phầ n tử :
• Nhược điểm
– Độ phứ c tạ p thuậ t toá n thêm/bớ t phầ n tử và o/ra danh sá ch
là khá cao T(n)max=O(n)
– Lã ng phí khi trong danh sá ch có nhiều phầ n tử cù ng giá trị

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 7


Khoa Hệ Thống Thông Tin Quản lý

Khai báo cấu trúc danh sách Đặc (kề)

#define MAXLIST 200


typedef struct DanhSachKe{
int num;
int nodes[MAXLIST];
}List;

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 8


Khoa Hệ Thống Thông Tin Quản lý

Các thao tác trên danh sách đặc sử dụng mảng

• Khởi tạo danh sách


void Init(List &plist){
plist.num=0;
}
• Xác định số nút (số phần tử)
int ListSize(List plist){
return plist.num;
}

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 9


Khoa Hệ Thống Thông Tin Quản lý

Các thao tác trên danh sách đặc sử dụng mảng

• Kiểm tra danh sách rỗng


int IsEmpty(List plist){
return (plist.num==0); // Nếu rỗ ng  trả về giá trị 1 (true),
ngượ c lạ i trả về giá trị 0 (false)
}
• Kiểm tra danh sách đầy
int IsFull(List plist){
return (plist.num==MAXLIST); // Nếu đầy trả về giá trị 1
(true), ngượ c lạ i trả về giá trị 0 (false)

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 10


Khoa Hệ Thống Thông Tin Quản lý

Các thao tác trên danh sách đặc sử dụng mảng

• Truy xuất một phần tử trong danh sách


int Retrieve(List plist, int pos){
if(pos<0 || pos>=ListSize(plist))
{
printf("Vi tri %d khong hop le",pos); return -1;}
else
{ if(IsEmpty(plist))
printf("danh sach bi rong!!!");
else
return plist.nodes[pos];
}
}

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 11


Khoa Hệ Thống Thông Tin Quản lý

Các thao tác trên danh sách đặc sử dụng mảng

• Thêm một phần tử vào danh sách


void Insert(List &plist, int pos, int x){ int i;
if (pos<0 || pos>plist.num)
{ printf("Vi tri chen khong hop le !"); return; }
else{ if(IsEmpty(plist) ){
printf("Danh sach rong !");
return; }
else{
for (i=plist.num-1;i>=pos;i-- )
{ plist.nodes[i+1]=plist.nodes[i]; }
plist.nodes[pos]=x;
plist.num++; }
}
}
GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 12
Khoa Hệ Thống Thông Tin Quản lý

Các thao tác trên danh sách đặc sử dụng mảng

• Xóa một phần tử ra khỏi danh sách


int Remove(List &plist, int pos){
int i;
int x;
if(pos <0 || pos>=ListSize(plist))
printf("\n Vi tri xoa khong phu hop");
else{
if(IsEmpty(plist)) printf("\n Danh sach rong");
else{
x=plist.nodes[pos];
for(i=pos;i<ListSize(plist)-1;i++){
plist.nodes[i]=plist.nodes[i+1];
}
plist.num--;
return x; 0 1 2 9
}
} A
}
GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 13
Khoa Hệ Thống Thông Tin Quản lý

Các thao tác trên danh sách đặc sử dụng mảng

• Tìm kiếm 1 phần tử trong danh sách


int Search(List plist, int x){
int vitri=0;
while(plist.nodes[vitri]!=x && vitri<plist.num)
vitri++;
if(vitri==plist.num) return -1;
return vitri;
}

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 14


Khoa Hệ Thống Thông Tin Quản lý

Các thao tác trên danh sách đặc sử dụng mảng

• Sắp xếp danh sách (1)


void Sort1(List &plist){
int tam,i,j;
for(i=0;i<plist.num-1;i++)
for(j=i+1;j<plist.num;j++)
if(plist.nodes[i]>plist.nodes[j]) // Doi cho 2 phan tu nay
{
tam=plist.nodes[i];
plist.nodes[i]=plist.nodes[j];
plist.nodes[j]=tam;
}
}

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 15


Khoa Hệ Thống Thông Tin Quản lý

Các thao tác trên danh sách đặc sử dụng mảng

• Sắp xếp danh sách (2)


void SelectionSort(List &plist){
int i,j,vitrimin,min;
for(i=0;i<plist.num-1;i++){
min=plist.nodes[i];
vitrimin=i;
for(j=i+1;j<plist.num;j++){
if(min >plist.nodes[j]){
min=plist.nodes[j];
vitrimin=j;
}
}
plist.nodes[vitrimin]=plist.nodes[i];
plist.nodes[i]=min;
}
}
GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 16
Khoa Hệ Thống Thông Tin Quản lý

Các thao tác trên danh sách đặc sử dụng mảng

Bài tập
Viết chương trình quả n lý sinh viên cà i đặ t bằ ng
danh sá ch đặ c. Chương trình gồ m cá c chứ c nă ng:
- Thêm danh sá ch SV
- Thêm 1 SV và o danh sá ch
- Xó a 1 SV khỏ i danh sá ch
- Hiệu chỉnh sinh viên
- Sắ p xếp danh sá ch SV theo mã sinh viên
- Tìm kiếm SV theo mã SV
- Xó a toà n bộ danh sá ch SV

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 17


Khoa Hệ Thống Thông Tin Quản lý

DANH SÁCH LIÊN KẾT

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 18


Khoa Hệ Thống Thông Tin Quản lý

Khái niệm về danh sách liên kết

 Danh sá ch liên kết là mộ t cấ u trú c dữ liệu dù ng để


lưu trữ mộ t tậ p cá c phầ n tử rờ i rạ c có thể co giã n
mộ t cá ch linh độ ng.
 Kích thướ c củ a danh sá ch liên kết khô ng cầ n định
nghĩa trướ c, nó tự độ ng thay đổ i khi số phầ n tử
trong danh sá ch thay đổ i.
 Khô ng giớ i hạ n số lượ ng phầ n tử
 Dễ dà ng thự c hiện thao tá c: thêm, sửa , xóa
 Truy xuấ t dữ liệu kiểu tuầ n tự

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 19


Khoa Hệ Thống Thông Tin Quản lý

Khái niệm về danh sách liên kết

 Trong danh sá ch liên kết, mỗ i mộ t Node (phầ n tử )


thườ ng có ít nhấ t 2 thô ng số : Giá trị củ a Node và
mố i liên kết tớ i Node khá c.

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 20


Khoa Hệ Thống Thông Tin Quản lý

Khái niệm về danh sách liên kết

 Để quả n lý danh sá ch liên kết ta thườ ng quả n lý


Node đầ u, hoặ c quả n lý cả Node đầ u và Node cuố i
pHead

8 pNext 9 pNext 5 pNext NULL

pHead
pTail

8 pNext 9 pNext 5 pNext NULL


GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 21
Khoa Hệ Thống Thông Tin Quản lý

Sự khác biệt giữa danh sách liên kết và mảng


Danh sách Đặc (Mảng) Danh sách liên kết
Phả i biết trướ c số lượ ng phầ n Khô ng cầ n biết trướ c, khô ng
tử , bị giớ i hạ n bở i số lượ ng ban bị giớ i hạ n số lượ ng phầ n tử ,
đầ u cấ p phá t tự độ ng thay đổ i kích thướ c
Truy xuấ t ngẫ u nhiên hoặ c truy Chỉ truy xuấ t tuầ n tự
xuấ t tuầ n tự
Khó xó a phầ n tử trong mả ng Dễ dà ng xó a phầ n tử trong
danh sá ch
Khó thêm phầ n tử Dễ thêm phầ n tử
Dễ sắ p xếp Khó sắ p xếp
Dễ tìm kiếm Dễ tìm kiếm

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 22


Khoa Hệ Thống Thông Tin Quản lý

Một số loại danh sách liên kết thường gặp


 Danh sách liên kết đơn: Mỗ i phầ n tử liên kết vớ i phầ n tử
đứ ng sau nó trong danh sá ch

pHead
pTail

8 pNext 9 pNext 5 pNext NULL

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 23


Khoa Hệ Thống Thông Tin Quản lý

Một số loại danh sách liên kết thường gặp


 Danh sách liên kết đôi: mỗ i phầ n tử liên kết vớ i cá c phầ n
tử đứ ng trướ c và sau nó trong danh sá ch

pHead pTail

NULL pPre
pPre 8 pNext pPre 9 pNext pPre 5 pNext 10 pNext
NULL

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 24


Khoa Hệ Thống Thông Tin Quản lý

Một số loại danh sách liên kết thường gặp


 Danh sách liên kết vòng : Phầ n tử cuố i danh sá ch liên kết
vớ i phầ n tử đầ u danh sá ch:

A D I M N W

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 25


Khoa Hệ Thống Thông Tin Quản lý

Các thao tác trên danh sách liên kết đơn

 Tạ o cấ u trú c dữ liệu cho danh sá ch liên kết


 Thêm Node : Đầ u, cuố i, giữ a danh sá ch
 Duyệt danh sá ch
 Xó a Node: Đầ u, cuố i, giữ a danh sá ch
 Tìm kiếm
 Sử a node theo điều kiện
 Sắ p xếp

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 26


Khoa Hệ Thống Thông Tin Quản lý

Tạo cấu trúc dữ liệu cho danh sách liên kết

 Tạo cấu trúc Node


Khai bá o mỗ i cấ u trú c là mộ t mẫ u tin có hai trườ ng
info và trườ ng next:
- Trườ ng info: chứ a nộ i dung củ a nú t.
- Trườ ng next: là con trỏ chỉ nú t, dù ng để chỉ đến nú t
kế tiếp trong danh sá ch liên kết.

typedef struct node{


int info;
node* next;
}Node;
typedef Node* NODEPTR;
GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 27
Khoa Hệ Thống Thông Tin Quản lý

Tạo cấu trúc dữ liệu cho danh sách liên kết

 Khởi tạo danh sách liên kết đơn


pHead
void Init(NODEPTR &phead){
phead=NULL; NULL
} Size
=0 pTail

 Kiểm tra danh sách có rỗng hay không


int IsEmpty(NODEPTR phead){
return (phead==NULL);
}

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 28


Khoa Hệ Thống Thông Tin Quản lý

Tạo cấu trúc dữ liệu cho danh sách liên kết

 Tạo node trong danh sách liên kết đơn


NODEPTR CreateNode(int x){
NODEPTR p=new Node;
p->info=x;
p->next=NULL;
return p;
}

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 29


Khoa Hệ Thống Thông Tin Quản lý

Thêm node vào vị trí ở đầu danh sách

• Thêm mộ t nú t p và o đầ u danh sá ch
– Nếu Danh sá ch rỗ ng Thì
• Gá n: pHead = p;
– Ngượ c lạ i
• p->Next = pHead;
• pHead = p;

pHead
A B C D E NULL

X
p

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 30


Khoa Hệ Thống Thông Tin Quản lý

Thêm node vào vị trí ở đầu danh sách

void InsertFirst(NODEPTR &phead, int x){


NODEPTR p=CreateNode(x);
if(phead==NULL)
phead=p;
else
{
p->next=phead;
phead=p;
}
}

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 31


Khoa Hệ Thống Thông Tin Quản lý

Thêm node vào cuối danh sách


• Chèn nú t p và o cuố i
– Nếu Danh sá ch rỗ ng Thì
• Gán: pHead = p;
– Ngượ c lạ i
• Gán ptemp = pHead;
• Đi về nú t cuố i củ a danh sách
(while (ptemp->next != NULL) ptemp = ptemp->next;)
• ptemp->pNext = p;

pHead
A B C D E
ptemp
X

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 32


Khoa Hệ Thống Thông Tin Quản lý

Thêm node vào cuối danh sách


void InsertLast(NODEPTR &phead, int x){
NODEPTR tam=CreateNode(x);
NODEPTR p = phead;
if (phead==NULL)
phead=tam;
else
{
NODEPTR ptemp=phead;
while (ptemp->next!=NULL)
ptemp = ptemp->next;

ptemp->next=tam;
}
}

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 33


Khoa Hệ Thống Thông Tin Quản lý

Thêm nút có nội dung x vào sau nút q

– Nếu (q != NULL)
• p=CreateNode(x)
• p>next = q->next;
• q->next = p ;
– Ngượ c lạ i: q = p;

q
pHead
A B C D E

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 34


Khoa Hệ Thống Thông Tin Quản lý

Thêm nút có nội dung x vào sau nút q


void InsertAfter (NODEPTR q, int x){
NODEPTR p;
if(q!=NULL){
p=CreateNode(x);
p->next=q->next;
q->next=p;
}
} q
pHead
A B C D E

p
GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 35
Khoa Hệ Thống Thông Tin Quản lý

Xóa 1 nút trong danh sách

• Xóa nút đầu danh sách


– Nếu (pHead != NULL) thì
• p = pHead; // p là nút cần xóa
• pHead = p->Next;
• delete p;

p
pHead
A B X Z Y

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 36


Khoa Hệ Thống Thông Tin Quản lý

Xóa 1 nút trong danh sách

• Xóa nút đầu danh sách

p
pHead
A B X Z Y

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 37


Khoa Hệ Thống Thông Tin Quản lý

Xóa 1 nút trong danh sách


• Xóa một nút đứng sau p
– Nếu (p== NULL) hoặ c (p->next==NULL):
Khô ng thể xó a nú t
– Ngượ c lạ i:
• q = p->Next; // q là nút cần xóa
• p->Next = q->Next; // tách q ra khỏi ds
• delete q; // Giải phóng q

p q
pHead
A B C D E

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 38


Khoa Hệ Thống Thông Tin Quản lý

Xóa 1 nút trong danh sách


• Xóa một nút đứng sau p

p q
pHead
A B C D E

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 39


Khoa Hệ Thống Thông Tin Quản lý

Xóa 1 nút trong danh sách


• Xóa một nút có khóa x
– Tìm nú t p có khó a k và phầ n tử q đứ ng trướ c nó
– Nếu (p!= NULL) // tìm thấy x
• xó a p đứ ng sau nú t q;
– Ngượ c lạ i
– Bá o khô ng có x; Xóa nút có
khóa là X

q
pHead
A B X Z Y

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 40


Khoa Hệ Thống Thông Tin Quản lý

Xóa 1 nút trong danh sách


• Xóa một nút có khóa x
void DeleteX(NODEPTR &pHead, int x)
{
NODEPTR q;
NODEPTR p = pHead;
while ((p != NULL) && (p->info != x))
{
q = p;
p = p->next;
}
if (q != NULL)
DeleteAfter(q);
Xóa nút có
else
khóa là X
DeleteFirst(q);
} q
pHead
A B X Z Y

p
GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 41
Khoa Hệ Thống Thông Tin Quản lý

Duyệt danh sách

p = pHead;
– Trong khi chưa hết danh sá ch
• Xử lý nú t p ;
• p= p->pNext;

pHead
A B C D E

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 42


Khoa Hệ Thống Thông Tin Quản lý

Duyệt danh sách

void ShowList(NODEPTR phead){


NODEPTR p=phead;
if(p==NULL)
printf("\n Danh sach bi rong");
while(p!=NULL){
printf("%5d",p->info);
p=p->next;
}
}pHead
A B C D E

P
GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 43
Khoa Hệ Thống Thông Tin Quản lý

Tìm kiếm trên danh sách


 Danh sá ch liên kết đò i hỏ i truy xuấ t tuầ n tự , do đó chỉ có thể
á p dụ ng thuậ t toá n tìm tuyến tính để xá c định phầ n tử trong
xâ u có khoá x. Sử dụ ng mộ t con trỏ phụ trợ p để lầ n lượ t trỏ
đến cá c phầ n tử trong xâ u. Thuậ t toá n đượ c thể hiện như
sau
 Bướ c 1:
p = Head; //Cho p trỏ đến phầ n tử đầ u danh sá ch
 Bướ c 2:
Trong khi (p != NULL) và (p->data != x ) thự c hiện:
B21 : p=p->Next;// Cho p trỏ tớ i phầ n tử kế
 Bướ c 3:
• Nếu p != NULL thì p trỏ tớ i phầ n tử cầ n tìm
• Ngượ c lạ i: khô ng có phầ n tử cầ n tìm.
GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 44
Khoa Hệ Thống Thông Tin Quản lý

Tìm kiếm trên danh sách


NODEPTR Search(NODEPTR phead, int x){
NODEPTR p=phead;
while(p!=NULL)
{
if(p->info==x)
break;
p=p->next;
}
return p;
}

pHead
A B C D E

P
GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 45
Khoa Hệ Thống Thông Tin Quản lý

Sắp xếp danh sách


Á p dụ ng cá c giả i thuậ t sắ p xếp đã họ c để tiến hà nh sắ p xếp
danh sá ch.
void Sort(NODEPTR &phead){
NODEPTR p,q;
int tam;
for(p=phead;p->next!=NULL;p=p->next)
for (q=p->next;q!=NULL;q=q->next)
if(p->info>q->info)
{
tam=p->info;
p->info=q->info;
q->info=tam;
}
}

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 46


Khoa Hệ Thống Thông Tin Quản lý

Bài tập

• Dù ng danh sá ch liên kết quả n lý sinh viên trong lớ p


(mssv, họ , tên, ngày sinh, điểm tổ ng kết họ c kỳ).
• Thự c hiện cá c thao tá c: thêm, bớ t, sắ p xếp sinh viên
(theo điểm tổ ng kết) trong danh sá ch

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 47


Khoa Hệ Thống Thông Tin Quản lý

TRƯỜNG ĐẠI HỌC NGÂN HÀNG TP HCM


KHOA HỆ THỐNG THÔNG TIN QUẢN LÝ

NGĂN XẾP
STACK

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 48


Khoa Hệ Thống Thông Tin Quản lý

Nội dung

 Giớ i thiệu về Stack


 Hiện thự c Stack
 Mộ t số bà i toá n ứ ng dụ ng Stack

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 49


Khoa Hệ Thống Thông Tin Quản lý

Giới thiệu về Stack

Khái niệm về Stack:


• Stack có thể đượ c xem là mộ t dạ ng danh sá ch đặ c biệt
trong đó cá c tá c vụ thêm và o hoặ c xó a đi mộ t phầ n tử
chỉ diễn ra ở mộ t đầ u gọ i là đỉnh Stack. Trên Stack cá c
nú t đượ c thêm và o sau lạ i đượ c lấy ra trướ c nên cấ u
trú c Stack hoạ t độ ng theo cơ chế và o sau ra trướ c -
LIFO (Last In First Out).
• Hai thao tá c chính trên Stack:
- Tá c vụ push dù ng để thêm mộ t phầ n tử và o đỉnh
Stack
- Tá c vụ pop dù ng để xoá đi mộ t phầ n tử ra khỏ i đỉnh
Stack.
GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 50
Khoa Hệ Thống Thông Tin Quản lý

Giới thiệu về Stack

• Hình sau đây mô tả hình ảnh của Stack qua các tác vụ:
- push(s,A): hình a.
- push(s,B): hình b.
- pop(s): hình c.
- push(s,C): hình d.

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 51


Khoa Hệ Thống Thông Tin Quản lý

Giới thiệu về Stack

Pop
Push

Top

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 52


Khoa Hệ Thống Thông Tin Quản lý

Giới thiệu về Stack

• Mô tả Stack
Mô tả dữ liệu:
Stack là mộ t kiểu dữ liệu trừ u tượ ng có nhiều nú t cù ng kiểu
dữ liệu trả i dà i từ đáy Stack đến đỉnh Stack.
Mô tả các tác vụ:
- Tác vụ Init
Chứ c nă ng: khở i độ ng Stack
Dữ liệu nhậ p: khô ng
Dữ liệu xuấ t: Stack top trở về đầ u Stack.
- Tác vụ IsEmpty
Chứ c nă ng: kiểm tra Stack có rỗ ng hay khô ng.
Dữ liệu nhậ p: khô ng.
Dữ liệu xuấ t: TRUE|FALSE.

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 53


Khoa Hệ Thống Thông Tin Quản lý

Giới thiệu về Stack

• Mô tả Stack
- Tác vụ Push
Chứ c nă ng: thêm nú t mớ i tạ i đỉnh Stack.
Dữ liệu nhậ p: nú t mớ i
Dữ liệu xuấ t: khô ng.
- Tác vụ Pop
Chứ c nă ng: xó a nú t tạ i đỉnh Stack.
Dữ liệu nhậ p: khô ng
Điều kiện: Stack khô ng bị rỗ ng.
Dữ liệu xuấ t: nú t bị xoá .

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 54


Khoa Hệ Thống Thông Tin Quản lý

Giới thiệu về Stack

• Ứng dụng của Stack


- Stack thườ ng đượ c dù ng để giả i quyết cá c vấ n đề có cơ chế LIFO.
- Stack dù ng trong trình biên dịch củ a cá c ngô n ngữ lậ p trình như:
+ Kiểm tra cú phá p củ a cá c câ u lệnh trong ngô n ngữ lậ p trình.
+ Xử lý cá c biểu thứ c toá n họ c: kiểm tra tính hợ p lệ củ a cá c dấ u
trong ngoặ c mộ t biểu thứ c, chuyển biếu thứ c từ dạ ng trung tố
(infix) sang dạ ng hậ u tố (postfix), tính giá trị củ a biểu thứ dạ ng
hậ u tố .
+ Xử lý việc gọ i cá c chương trình con.
- Stack thườ ng đượ c sử dụ ng để chuyển một giải thuật đệ qui
thành giải thuật không đệ qui.

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 55


Khoa Hệ Thống Thông Tin Quản lý

Giới thiệu về Stack

• Hiện thực Stack bằng danh sách kề


Khai bá o cấ u trú c Stack: là mộ t mẩ u tin có hai trườ ng:
- Trườ ng top: là mộ t số nguyên chỉ đỉnh Stack.
- Trườ ng nodes: là mả ng mộ t chiều, mỗ i phầ n tử củ a mả ng là
mộ t nú t củ a Stack.

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 56


Khoa Hệ Thống Thông Tin Quản lý

Hiện thực Stack

• Hiện thực Stack bằng danh sách kề

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 57


Khoa Hệ Thống Thông Tin Quản lý

Hiện thực Stack

• Hiện thực Stack bằng danh sách kề

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 58


Khoa Hệ Thống Thông Tin Quản lý

Hiện thực Stack

Hiện thực stack bằng danh sách liên kết


• Khai báo cấu trúc Stack:

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 59


Khoa Hệ Thống Thông Tin Quản lý

Hiện thực Stack

Hiện thực stack bằng danh sách liên kết

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 60


Khoa Hệ Thống Thông Tin Quản lý

Hiện thực Stack

Hiện thực stack bằng danh sách liên kết

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 61


Khoa Hệ Thống Thông Tin Quản lý

Hiện thực Stack

Hiện thực stack bằng danh sách liên kết

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 62


Khoa Hệ Thống Thông Tin Quản lý

TRƯỜNG ĐẠI HỌC NGÂN HÀNG TP HCM


KHOA HỆ THỐNG THÔNG TIN QUẢN LÝ

HÀNG ĐỢI
QUEUE

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 63


Khoa Hệ Thống Thông Tin Quản lý

Nội dung

 Giớ i thiệu về Queue


 Hiện thự c Queue
 Hà ng đợ i có ưu tiên

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 64


Khoa Hệ Thống Thông Tin Quản lý

Giới thiệu về Queue

• Queue (hà ng đợ i) là mộ t dạ ng danh sá ch đặ t biệt, trong đó


chú ng ta chỉ được phép thêm các phần tử vào cuối hàng
đợi và lấy ra các phần tử ở đầu hàng đợi. Vì phầ n tử thêm
và o trướ c đượ c lấy ra trướ c nên cấ u trú c hà ng đợ i cò n đượ c
gọ i là cấ u trú c FIFO (First In First Out).

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 65


Khoa Hệ Thống Thông Tin Quản lý

Giới thiệu về Queue

• Hà ng đợ i là cấ u trú c đượ c sử dụ ng rộ ng rã i trong thự c


tế: ngườ i ta dù ng hà ng đợ i để giả i quyết cá c vấ n đề có
cấ u trú c FIFO như xử lý cá c dịch vụ củ a ngâ n hà ng, để
xử lý cá c tiến trình đang đợ i phụ c vụ trong cá c hệ điều
hà nh nhiều ngườ i sử dụ ng, quả n lý cá c yêu cầ u in trên
máy print servers…

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 66


Khoa Hệ Thống Thông Tin Quản lý

Giới thiệu về Queue

• Queue là 1 cấ u trú c dữ liệu:


– Gồ m nhiều phầ n tử có thứ tự
– Hoạ t độ ng theo cơ chế “Và o trướ c – Ra trướ c”
(FIFO – First In, First Out)

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 67


Khoa Hệ Thống Thông Tin Quản lý

Giới thiệu về Queue

Front

Append Take

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 68


Khoa Hệ Thống Thông Tin Quản lý

Giới thiệu về Queue

• Khái niệm về Queue


Hà ng đợ i chứ a cá c nú t có cù ng kiểu dữ liệu trả i dà i từ
đầ u hà ng đợ i (front) đến cuố i hà ng đợ i (rear). Hai tá c
vụ chính trên hà ng đợ i:
- insert – thêm nú t mớ i và o cuố i hà ng đợ i
- remove – dù ng để xoá mộ t phầ n tử ra khỏ i hà ng đợ i.

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 69


Khoa Hệ Thống Thông Tin Quản lý

Giới thiệu về Queue

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 70


Khoa Hệ Thống Thông Tin Quản lý

Giới thiệu về Queue

• Mô tả Queue
Mô tả dữ liệu
Hà ng đợ i là mộ t kiểu dữ liệu trừ u tượ ng có nhiều nú t cù ng kiểu
dữ liệu trả i dà i từ đầ u hà ng đợ i đến cuố i hà ng đợ i.
Mô tả các tác vụ cơ bản:
- Tá c vụ init
Chứ c nă ng: khở i độ ng hà ng đợ i
Dữ liệu nhậ p: khô ng
Dữ liệu xuấ t: hai con trỏ front và rear đượ c gá n cá c giá trị phù
hợ p.
- Tá c vụ IsEmpty
Chứ c nă ng: kiểm tra hà ng đợ i có bị rỗ ng hay khô ng
Dữ liệu nhậ p: khô ng
Dữ liệu xuấ t: TRUE|FALSE
GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 71
Khoa Hệ Thống Thông Tin Quản lý

Giới thiệu về Queue

• Tá c vụ insert
Chứ c nă ng: Thêm nú t mớ i và o hà ng đợ i.
Dữ liệu nhậ p: nú t mớ i
Điều kiện: hà ng đợ i khô ng bị đầy.
Dữ liệu xuấ t: khô ng.
• Tá c vụ remove
Chứ c nă ng: lấy nú t tạ i đầ u hà ng đợ i
Dữ liệu nhậ p: khô ng
Điều kiện: hà ng đợ i khô ng bị rỗ ng
Dữ liệu xuấ t: thô ng tin nú t bị lấy ra.

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 72


Khoa Hệ Thống Thông Tin Quản lý

Giới thiệu về Queue

Ứng dụng của hàng đợi


• Hà ng đợ i đượ c dù ng để giả i quyết cá c vấ n đề có cơ
chế FIFO (First In First Out).
• Trong thự c tế ngườ i ta thườ ng cà i đặ t hà ng đợ i trong
cá c chương trình xử lý cá c dịch vụ ngâ n hà ng, xử lý
cá c tá c vụ đang đợ i phụ c vụ trong cá c hệ điều hà nh
đa ngườ i sử dụ ng, quả n lý cá c yêu cầ u in trong máy
server printers…

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 73


Khoa Hệ Thống Thông Tin Quản lý

Hiện thực Queue

• 6.2.1 Dùng mảng vòng hiện thực hàng đợi


Đây là cách thườ ng dù ng nhất để cài đặ t hàng đợ i theo kiểu kế tiếp. Lú c
này ta xem mảng như là mảng vò ng chứ khô ng phải là mảng thẳng: nú t
nodes[0] xem như là nú t sau củ a nú t nodes[MAXQUEUE -1]

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 74


Khoa Hệ Thống Thông Tin Quản lý

Hiện thực Queue

• 6.2.1 Dùng mảng vòng hiện thực hàng đợi

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 75


Khoa Hệ Thống Thông Tin Quản lý

Hiện thực Queue

• 6.2.1 Dùng mảng vòng hiện thực hàng đợi

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 76


Khoa Hệ Thống Thông Tin Quản lý

Hiện thực Queue

• 6.2.2 Dùng danh sách liên kết hiện thực hàng đợi
Ta có thể cà i đặ t hà ng đợ i như mộ t danh sá ch liên kết: con
trỏ đầ u danh sá ch liên kết front chỉ nú t tạ i đầ u hà ng đợ i, con
trỏ rear trỏ đến nú t cuố i cù ng củ a hà ng đợ i.
Hình vẽ sau thể hiện cá ch cà i đặ t hà ng đợ i bằ ng danh sá ch
liên kết.

• Vớ i cá ch cà i đặ t này ta có thể hiện thự c cá c tá c vụ củ a hà ng


đợ i như: Insert, Remove, IsEmpty…trên danh sá ch liên kết.

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 77


Khoa Hệ Thống Thông Tin Quản lý

Hàng đợi có ưu tiên

• Hà ng đợ i hoạ t độ ng trên nguyên tắ c nú t nà o và o trướ c đượ c


lấy ra trướ c, nú t nà o và o sau đượ c lấy ra sau là hà ng đợ i
khô ng có ưu tiên.
• Trong thự c tế có mộ t dạ ng hà ng đợ i khá c hoạ t độ ng theo cơ
chế: nú t nà o có độ ưu tiên cao hơn sẽ đượ c lấy ra trướ c, nú t
nà o có độ ưu tiên thấ p hơn thì lấy ra sau. Hà ng
đợ i lú c này gọ i là hà ng đợ i có ưu tiên (priority queue).
• Có 2 loạ i hà ng đợ i có ưu tiên:
- Hà ng đợ i có ưu tiên tă ng: nú t có độ ưu tiên cao nhấ t đượ c
lấy ra.
- Hà ng đợ i có ưu tiên giả m: nú t có độ ưu tiên giả m sẽ đượ c
lấy ra trướ c.

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 78


Khoa Hệ Thống Thông Tin Quản lý

Tóm tắt

• Cấ u trú c Queue là danh sá ch đặ c biệt vớ i thao tá c


thêm và o đượ c thự c hiện ở cuố i danh sá ch và lấy ra ở
đầ u danh sá ch. Queue hoạ t độ ng theo cơ chế FIFO.
• Cá c thao tá c cơ bả n trên Queue: Init, isEmpty, Insert,
Remove
• Ứ ng dụ ng Queue trong bà i toá n hà ng đợ i “Và o trướ c ra
trướ c” FIFO: hệ thố ng print server, cơ chế thô ng điệp,
bộ đệm, hà ng đợ i xử lý sự kiện… Cá c ứ ng dụ ng đặ t vé
tà u lử a, máy bay… Cá c hệ thố ng rú t tiền.

GV: ThS. Nguyễn Phương Nam - namnp@hub.edu.vn 79

You might also like