Tải bản đầy đủ (.doc) (5 trang)

DeCuong stack C++ cấu trúc dữ liệu

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (126.18 KB, 5 trang )

ĐỀ CƯƠNG CẤU TRÚC DỮ LIỆU
I.

STACK, QUEUE
a. STACK (FILO)
• Khai báo
#define MaxLength 100
//độ dài của mảng
typedef int ElementType;
//kiểu phần tử của ngăn xếp
typedef struct
{
ElementType Elements[MaxLength]; //Lưu nội dung của các phần tử
int Top_idx;
//giữ vị trí đỉnh ngăn xếp
}Stack;
Stack S;
• Tạo STACK rỗng
void MakeNull_Stack(Stack *S)
{
S->Top_idx=MaxLength;
}
• Kiểm tra rỗng – trang 34
• Kiểm tra đầy – trang 33
• Lấy đỉnh
ElementType Top(Stack S)
{
if (S->Top == MaxLength)
{
printf("Loi! Ngan xep rong");
}


else
{
return S.Elements[S.Top_idx];
}
}
• Thêm vào STACK – Push (phải có *S)
void Push(ElementType X, Stack *S)
{
if (S->Top_idx ==0) // ngan xep day
printf("Loi! Ngan xep day!");
else
{
S->Top_idx=S->Top_idx-1;
S->Elements[S->Top_idx]=X;
}
}
• Xóa khỏi STACK – POP (phải có *S)
void Pop(Stack *S)


{
if (S->Top == MaxLength) // STACK rong
{
printf("Loi! Ngan xep rong!");
}
else
{
S->Top_idx = S->Top_idx+1;
}
}

• BÀI TẬP áp dụng
Chuyển đổi cơ số thập phân sang nhị phân
void chuyencoso( int X, Stack *S)
{
MakeNull_Stack(S);
while (X!=0)
{
int soDu = X%2;
Push(soDu, S);
X = X/2;
}
// xuất Stack ra
while((S)->Top!=Max)
{
cout<}
}
Kiểm tra dấu ngoặc
Sinh viên tự viết


b. QUEUE (FIFO)
• Hàng đợi tịnh tiến
 Khai báo
#define MaxLength 100
//chiều dài tối đa của mảng
typedef int ElementType;
//Kiểu dữ liệu của các phần tử trong hàng
typedef struct
{

ElementType Elements[MaxLength];
//Lưu trữ nội dung các phần tử
int Front
int Rear;
//Chỉ số đầu và cuối hàng
} Queue;
Queue Q;
 TẠO RỖNG
void MakeNull_Queue(Queue *Q)
{
Q->Front=-1;
Q->Rear=-1;
}
 KIỂM TRA RỖNG – TRANG 37,38
 KIỂM TRA ĐẦY – TRANG 37,38
 Chèn – ENQUEUE (3 phần quan trọng)
void EnQueue(ElementType X,Queue *Q)
{
if (!Full_Queue(*Q))
{
if (Empty_Queue(*Q))
Q->Front=0;
if (Q->Rear==MaxLength-1)
{
//Di chuyen tinh tien ra truoc Front -1 vi tri
for(int i=Q->Front ; i<=Q->Rear ; i++)
{
Q->Elements[i-Q->Front]=Q->Elements[i];
}
//Cập nhật lại vi tri Rear moi

Q->Rear=MaxLength - Q->Front-1;
Q->Front=0;
}
//Tang Rear de luu noi dung moi – quan trọng
Q->Rear=Q->Rear+1;
Q->Element[Q->Rear]=X;
}
}
else printf("Loi: Hang day!");}
 Xóa – DEQUEUE


void DeQueue(Queue *Q)
{
if (!Empty_Queue(*Q))
{
Q->Front=Q->Front+1; //quan trọng
if (Q->Front>Q->Rear)
{
MakeNull_Queue(Q); //Dat lai hang rong
}
}else printf("Loi: Hang rong!");
}


• Hàng đợi vòng
Khác với tĩnh %MaxLength
 KIỂM TRA ĐẦY
int Full_Queue(Queue Q)
{

return (Q.Rear-Q.Front+1) % MaxLength==0;
}
 XÓA PHẦN TỬ
void DeQueue(Queue *Q)
{
if (!Empty_Queue(*Q))
{
//Nếu hàng chỉ chứa một phần tử thì khởi tạo hàng lại
if (Q->Front==Q->Rear) MakeNull_Queue(Q);
{
else Q->Front=(Q->Front+1) % MaxLength;
//tăng Front lên 1 đơn vị
}
}else printf("Loi: Hang rong!");
}
 KIỂM TRA ĐẦY
void EnQueue(ElementType X,Queue *Q){
if (!Full_Queue(*Q))
{
if (Empty_Queue(*Q))
{
Q->Front=0;
}
Q->Rear=(Q->Rear+1) % MaxLength; //QUAN TRỌNG
Q->Elements[Q->Rear]=X;
//QUAN TRỌNG
}
else printf("Loi: Hang day!");
}
• BÀI TẬP ÁP DỤNG

Mô tả bài chuyến phà - đúng nguyên tắt vào trước ra trước.



×