Bài giảng Cấu trúc dữ liệu và giải thuật – Bài 10: Ứng dụng của ngăn xếp với những kiến thức đảo mảng, đảo chuỗi, chuyển đổi hệ số, bracket matching, balancing ACT.
Cấu trúc liệu giải thuật Bài 10: Ứng dụng ngăn xếp Giảng viên: TS Ngo Huu Phuc Tel: 0438 326 077 Mob: 098 5696 580 Email: ngohuuphuc76@gmail.com PhD Ngo Huu Phuc, Le Quy Don Technical University Bài 10 Một vài ứng dụng Stack Nội dung: 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: Data structures and Algorithms Stacks.htm Kyle Loudon Mastering Algorithms, Chapter Stacks and Queues Elliz Horowitz – Fundamentals of Data Structures, Chapter Stacks and Queues Deshpande Kakle – C and Data Structures, Chapter 19 Stacks and Queues Bài giảng TS Nguyễn Nam Hồng PhD Ngo Huu Phuc, Le Quy Don Technical University 10.1 Đảo mảng (1/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 18 134 216 23 25 47 55 25 23 55 47 18 17 216 134 PhD Ngo Huu Phuc, Le Quy Don Technical University 10.1 Đảo mảng (2/3) Ý tưởng thực giải thuật: Khởi tạo Stack rỗng, có kiểu số Với n phần tử mảng, đưa vào Stack thông qua hàm Push: Push a[i] in to Stack 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] 4 Kết thúc giải thuật PhD Ngo Huu Phuc, Le Quy Don Technical University 10.1 Đảo mảng (3/3) Ví dụ đảo mảng: void revArray(int a[],int n,int stack[]) { makeEmpty(stack); for(int i=0;i0) { else push(stack,a%2+'0'); { printf("Khong the them vao STACK\n"); a=a/2; getch(); n++; } char pop(char stack[]) char* mString; { mString = (char*) malloc(n); } if(stack[0]>0) { value=stack[stack[0]]; while(stack[0]>0) stack[0] ; mString[i]=pop(stack); i++; } mString[i]='\0'; return mString; } else } { printf("STACK rong\n"); value = -1; return value; } PhD Ngo Huu Phuc, Le Quy Don Technical University } char value; int i=0; { 13 { } 10.3 Chuyển đổi hệ số (3/9) Ý tưởng chuyển đổi từ hệ thập phân sang hệ 16 sử dụng Stack: Khởi tạo Stack rỗng Chuyển đổi số từ dạng thập phân sang nhị phân phép div mod cho 16 Kết phép mod đưa vào Stack Đọc từ Stack hết, kết nối với để tạo thành chuỗi Kết thúc giải thuật 14 PhD Ngo Huu Phuc, Le Quy Don Technical University 10.3 Chuyển đổi hệ số (4/9) Các hàm Dec to Hex: char* mString; char* DecToHex(int a, char stack[]) mString = (char*) malloc(n); { int i=0; makeEmpty(stack); while(stack[0]>0) int n=0; { while(a>0) mString[i]=pop(stack); { i++; int t = a%16; } if(t>=0 && t