Kyle Loudon Mastering Algorithms, Chapter 6 Stacks and Queues.. Bài gi ảng TS Nguyễn Nam Hồng.3[r]
(1)Giảng viên: TS Ngo Huu Phuc Tel: 0438 326 077 Mob: 098 5696 580 Email:
Cấu trúc liệu giải thuật
(2)10.1 Đảo mảng (3) 10.2 Đảo chuỗi (4)
10.3 Chuyển đổi hệ số (9) 10.4 Bracket Matching (5) 10.5 Balancing Act (4)
Tham khảo:
1 Data structures and Algorithms Stacks.htm
2 Kyle Loudon Mastering Algorithms, Chapter Stacks and Queues
3 Elliz Horowitz – Fundamentals of Data Structures, Chapter Stacks and
Queues
4 Deshpande Kakle – C and Data Structures, Chapter 19 Stacks and
Queues
(3) Cho mảng gồm dãy giá trị
Để đảo thứ tự phần tử mảng, sử dụng
nguyên lý Last-In-First-Out Stack
Ví dụ hoạt động đảo mảng:
17 23 25 18
18 25 23 17
134 47 55 216
(4)1 Khởi tạo Stack rỗng, có kiểu số
2 Với n phần tử mảng, đưa vào Stack
thông qua hàm Push:
Push a[i] in to Stack
3 Lần lượt lấy từ Stack n phần tử đưa vào trở
lại mảng ban đầu:
Pop a item from nStack in to a[i]
(5)Ví dụ đảo mảng:
void revArray(int a[],int n,int stack[])
{
makeEmpty(stack);
for(int i=0;i<n;i++) push(stack,a[i]);
(6) Đảo chuỗi thực việc đảo từ chuỗi, sử
dụng ý tưởng Last-In-First-Out Stack
Ví dụ đảo chuỗi:
Tôi Làm
Bài Tập
Tập Bài Làm Tơi
Chăm Học
Thì Giỏi
(7)Ý tưởng xây dựng chương trình: Tạo wStack rỗng
2 Với từ mWord đọc từ string, đưa từ
vào Stack:
Push mWord into wStack
3 Đọc từ wStack hết, thực hiện:
Pop a word from wStack into mWord
Concate mWord to the end of outp string
4 Dừng giải thuật
(8)#include <conio.h>
#include "string.h"
#define MAXSIZE 100
#define MAX 100
void push(char* stack[], char* value, int* top);
char* pop(char* stack[], int* top);
void main() {
char* stack[MAXSIZE];
int top=-1;
charmString[MAX];
char* mWord;
printf("Nhap vao mot chuoi: "); gets(mString);
mWord = strtok(mString," "); push(stack,mWord,&top);
mWord = strtok(NULL," ");
if(mWord) push(stack,mWord,&top); } char *p=pop(stack,&top); while(top>=0) { p=strcat(p," "); p=strcat(p,pop(stack,&top)); }
printf("Chuoi ket qua \n"); puts(p);
(9)void push(char* stack[], char* value, int* top) {
if(*top < MAXSIZE)
{ *top=*top+1; stack[*top]=(char*)malloc(strlen(value)); strcpy(stack[*top],value); } else {
printf("Khong the them vao STACK\n"); getch();
} }
char* pop(char* stack[], int* top) {
char* value;
if(*top>=0) {
value=(char*)malloc(strlen(stack[*top])); strcpy(value,stack[*top]);
*top=*top-1; }
else
{ printf("STACK rong\n");
value = NULL; }
returnvalue; }
void makeEmpty(int* top) {
(10)nhị phân (Binary), hệ 16 (Hexadecimal)
Con người thường sử dụng hệ thập phân
Đối với máy tính, thường sử dụng hệ nhị phân
Hệ 16 hệ trung gian hệ thập phân hệ nhị phân