1. Trang chủ
  2. » Luận Văn - Báo Cáo

Cài đặt thuật toán biến đổi biểu thức từ trung tố sang hậu tố sử dụng cấu trúc dữ liệu stack dạng mảng

7 4,8K 86

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 7
Dung lượng 863,76 KB

Nội dung

I,Phát biểu bài toán- Hàng ngày chúng ta thường xuyên làm việc và tiếp xúc với các biểu thức, toán hạng, toán tử… và máy tính cũng vậy.. Tuy nhiên máy tính không thể nào hiểu được ngôn n

Trang 1

HàNội - Năm 2014

Giảng viên hướng dẫn:Nguyễn Thị Quỳnh Như

Sinh viên thực hiện:Nguyễn Việt Dũng

Nguyễn Văn Quỳnh

Nguyễn Văn Bình

Lớp: 1210A04

Chuyên ngành: Công nghệ thông tin

Trang 2

I,Phát biểu bài toán

- Hàng ngày chúng ta thường xuyên làm việc và tiếp xúc với các biểu thức, toán hạng, toán tử… và máy tính cũng vậy Tuy nhiên máy tính không thể nào hiểu được ngôn ngữ và cách viết của con người, vì vậy

để máy tính hiểu được các biểu thức thì chúng ta phải chuyển chúng về một dạng mà máy tính có thể hiểu để thực hiện

II, Một số định nghĩa

1 Biếu thức trung tố là gì?

- Biểu thức trung tố là biểu thức mà toán tử sẽ được đặt giữa hai toán hạng, dĩ nhiên đây phải là toán tử hai ngôi Hay đơn giản nó là các phép tính mà ta bắt gặp hàng ngày trong học tập, đời sống

Vd: a+b

1+2+4

2 Biểu thức hậu tố là gì?

- Biểu thức hậu tố là biểu thức mà toán tử đứng sau toán hạng, và tất

nhiên đây phải là toán tử hai ngôi Nó còn được gọi là “ký pháp

nghịch đảo Ba Lan”.

Vd: ab+

12+4+

III, Tìm hiểu bài toán

- Chọn ngôn ngữ lập trình :ngôn ngữ C

- Cài đặt trên mảng và danh sách liên kết đơn

- Input : Biểu thức trung tố

10+4-6/5*9

- Output: Biểu thức hậu tố

10 +6

5/9*-1 Stack

- Stack là một dạng danh sách đặc biệt trong đó cách thao tác chỉ được thực hiện trên một đầu của Stack

Trang 3

- Đầu này được gọi là đỉnh của ngăn xếp

- Các phần tử vào trước sẽ được lấy ra sau, hay gọi là danh sách

LIFO(Last In First Out)

Cài đặt bằng mảng một chiều

a[0]

Cài đặt bằng danh sách liên kết đơn

……

2 Thuật toán

1, Khởi tạo ngăn xếp rỗng

2, Đọc các phần tử trong biểu thức trung tố :

- Toán hạng: hiển thị nó ra out put

- Nếu phần tử là :

- Dấu ‘(’ : đưa vào S

NULL

Trang 4

- Dấu ‘)’ : Lấy toàn bộ toán tử trong S ra cho đến khi gặp dấu ‘(’,dấu ‘(’ cũng được đưa ra

- Toán tử:

- Nếu toán tử có độ ưu tiên cao hơn so với toán tử ở đỉnh S thì đưa toán

tử đó vào S

- Ngược lại lấy ra và hiển thị toán tử ở đỉnh S

- Sau khi duyệt hết nếu trong S còn phần tử thì lấy lần lượt nó ra cho vào output

Phần cài đặt:

#include<stdio.h>

#define SIZE 50

#include <ctype.h>

char infx[50], pofx[50], ch, x;

char s[SIZE];

int top = -1;

push(char x) {

s[++top] = x;

}

char pop() {

return (s[top ]);

}

int doUuTien(char x) {

switch (x){

case '#':

return 0;

case '(':

return 1;

case '+':

case '-':

return 2;

case '*':

case '/':

return 3;

}

}

void convert(){

int i=0,k=0;

printf("\nMoi ban nhap bieu thuc trung to: ");

scanf("%s", infx);

Trang 5

push('#');

while ((ch = infx[i++]) != '\0') {

if (ch == '(')

push(ch);

else if (isalnum(ch))

pofx[k++] = ch;

else if (ch == ')') {

while (s[top] != '(')

pofx[k++] = pop();

x = pop();

} else {

while (doUuTien(s[top]) >= doUuTien(ch))

pofx[k++] = pop();

push(ch);

}

}

while (s[top] != '#')

pofx[k++] = pop();

pofx[k] = '\0';

printf("Bieu thuc so hau to la: %s\n", pofx);

}

main() {

char infx[50], pofx[50], ch, x;

char c = 'y';

printf("\n -***CHUYEN TU BIEU THUC TRUNG TO SANG BIEU THUC HAU TO*** -\n");

while(c == 'y'){

convert();

fflush(stdin);

printf("Ban co muon nhap tiep?y/n?");

scanf("%c",&c);

}

}

Trang 6

Chương trình khi chạy

Ví dụ:

Input: 10-3*(14-2)/12

-Out put: 10 3 14 2 * - * 12

Ngày đăng: 16/08/2014, 11:20

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w