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

10 28 0
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

Đang tải... (xem toàn văn)

Thông tin tài liệu

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

Ngày đăng: 10/03/2021, 16:20

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan