stack đề cương cấu trúc dữ liệu đề cương stack giúp bạn phần nào hiểu hơn cấu trúc dữ liệu giáo trình cấu trúc dữ liệu bằng c++, lập trình siêu hay ccccccccccccccccccccccccccccccccccccccccccwerferwgesthrtjsrtherweargawrhtejzetgwrgtrwzhethtjryfrjkyuktdyjwrEgqwFQƯETFERZUHJYRFCKJCGHJMCYGJRD6YUJTSEH
ĐỀ CƯƠNG CẤU TRÚC DỮ LIỆU I STACK, QUEUE a STACK (FILO) • Khai báo #define MaxLength 100 //độ dài mảng typedef int ElementType; //kiểu phần tử ngăn xếp typedef struct { ElementType Elements[MaxLength]; //Lưu nội dung 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 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 while((S)->Top!=Max) { coutRear=-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 truoc Front -1 vi tri for(int i=Q->Front ; iRear ; 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ứa phần tử 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 đơ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ả chuyến phà - nguyên tắt vào trước trước