โครงสร้างข้อมูลแบบ stack

51
โโโโโโโโโโโโโโโ โโโ Stack Data Structure Data Structure Department of Computer Science Department of Computer Science

Upload: hyatt-booker

Post on 03-Jan-2016

46 views

Category:

Documents


0 download

DESCRIPTION

โครงสร้างข้อมูลแบบ Stack. Data Structure. Department of Computer Science. ลักษณะของโครงสร้างข้อมูลแบบ Stack. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: โครงสร้างข้อมูลแบบ  Stack

โครงสร�างข้�อมู�ลแบบ Stack

Data StructureData Structure Department of Computer ScienceDepartment of Computer Science

Page 2: โครงสร้างข้อมูลแบบ  Stack

ล�กษณะข้องโครงสร�างข้�อมู�ลแบบStack

• ข้�อมู�ลที่�เก็�บใน Stack จะเก็�บในล�ก็ษณะวางที่�บ ก็�น เช่�นเดี�ยวก็�บก็ารวางจานเร�ยงซ้�อนก็�น ข้�อมู�ล

ตั�วแรก็จะเป็!นข้�อมู�ลที่�อย��ล�างสุ#ดีข้อง Stack และ ข้�อมู�ลสุ#ดีที่�ายจะเป็!นข้�อมู�ลที่�อย��บนสุ#ดี ข้อง

Stack เมู$อมู�ก็ารน%าข้�อมู�ลออก็จาก็ Stack ข้�อมู�ลที่�อย��บนสุ#ดี น�นคื$อข้�อมู�ลที่�น%าลงสุ��Stack เป็!นข้�อมู�ลสุ#ดีที่�าย จะเป็!นข้�อมู�ลที่�จะตั�องน%าออก็

จาก็ Stack ก็�อน ก็ารที่%างานล�ก็ษณะน�'เร�ยก็ว�าLIFO (last-in-first-out)

Data StructureData Structure Department of Computer ScienceDepartment of Computer Science

Page 3: โครงสร้างข้อมูลแบบ  Stack

Push Stack• Algorithm

1. ตัรวจสุอบว�า Stack เตั�มู ? ( โดียก็ารตัรวจสุอบว�าTop เที่�าก็�บ N) - ถ้�า Stack เตั�มู ให้�แสุดีงข้�อคืวามูว�า "Stack Overflow" แล�วเล+ก็งาน- ถ้�า Stack ไมู�เตั�มู ให้�ที่%างานข้�อที่� 2 และ 3 2. ให้�เพิ่+มูคื�าข้อง Top อ�ก็ 1 3. ใสุ�ข้�อมู�ลลงใน Stack ในตั%าแห้น�งข้องตั�วแป็ร Top

Data StructureData Structure Department of Computer ScienceDepartment of Computer Science

Page 4: โครงสร้างข้อมูลแบบ  Stack

Operation ข้อง Stack

1. Push Stack เป็!น operation สุ%าห้ร�บน%าข้�อมู�ลลงใน Stack

2. Pop Stack เป็!น operation สุ%าห้ร�บน%าข้�อมู�ลออก็จาก็ Stack

Data StructureData Structure Department of Computer ScienceDepartment of Computer Science

Page 5: โครงสร้างข้อมูลแบบ  Stack

ตั�วอย่�างการทำ�างานข้องOperation Push และ Pop

Data StructureData StructureDepartment of Computer ScienceDepartment of Computer Science

Page 6: โครงสร้างข้อมูลแบบ  Stack

Implementation Stack

• การ implement Stack ทำ�าได้� 2 ว�ธี ค!อ1. Array Implementation2. Linked List Implementation

•Array Implementation ข้�อตักลง 1) ก็%าห้นดีให้�จ%านวนข้�อมู�ลสุ�งสุ#ดีคื$อ N ที่�'งน�'เพิ่ราะ

ว�าก็ารก็%าห้นดี Array จะตั�องระบ#จ%านวนข้�อมู�ล สุ�งสุ#ดีที่�จะเก็�บลงใน Array

2) ก็%าห้นดีให้�ตั�วแป็ร Top แที่นจ%านวนข้�อมู�ลที่�มู� อย��ใน Stack

Data StructureData Structure Department of Computer ScienceDepartment of Computer Science

Page 7: โครงสร้างข้อมูลแบบ  Stack

Flowchart

Department of Computer ScienceDepartment of Computer Science

Page 8: โครงสร้างข้อมูลแบบ  Stack

Program ตั�วอย่�างโปรแกรมูน #เป%น Stack ข้อง

Integer • Pascal

Procedure Push ( X ) ;BeginIf Top=N Then Writeln ( " Stack Overflow " ) ElseBeginTop := Top + 1 ;Stack [ Top ] := X ;End;End;

Data StructureData Structure Department of Computer ScienceDepartment of Computer Science

Page 9: โครงสร้างข้อมูลแบบ  Stack

Program ตั�วอย่�างโปรแกรมูน #เป%น Stack ข้อง

Integer• C,C++

Push ( int X )

{if (Top = = N) printf ( " Stack Oerflow " );else{Top = Top + 1 ;Stack [ Top ] = X ;}}

Data StructureData Structure Department of Computer ScienceDepartment of Computer Science

Page 10: โครงสร้างข้อมูลแบบ  Stack

Program ตั�วอย่�างโปรแกรมูน #เป%น Stack ข้อง

Integer• C,C++ ฟั'งก(ชั่�*นการ Push

int Push ( int what){

if (Top<MAX-1){ top++; stackdata[top]=what; return 1;}return -1;

}

Data StructureData Structure Department of Computer ScienceDepartment of Computer Science

Page 11: โครงสร้างข้อมูลแบบ  Stack

ฟั'งก(ชั่�*นการ Push

• ฟั/งก็0ช่�นน�'เป็!นก็ารน%าข้�อมู�ลเข้�าสุ�� Stack คื$อ ถ้�า top น�อยก็ว�า MAX-1 ซ้2งก็�คื$อ ถ้�า Stack ย�งไมู�เตั�มู ก็�ให้� top++ และเก็�บข้�อมู�ลที่�สุ�งมูาที่างพิ่ารามู+เตัอร0 what ลงไป็ในตั�วแป็ร stackdata ช่�องที่� top ช่�'อย��น� 'นเอง จาก็น�'น return 1 ก็ล�บไป็ย�งจ#ดีที่�เร�ยก็ใช่�เป็!นก็ารบอก็สุถ้านะว�าตัอนน�'ไดี� push เร�ยบร�อยแล�วน�นเอง แตั�ถ้�าเง$อนไข้ if ไมู�เป็!นจร+ง มู�นก็�จะลงมูาที่%าที่� return-1 ดี�งน�'น ฟั/งก็0ช่�นน�'คื$นคื�า -1 แสุดีงว�า stack เตั�มูแล�วน�นเองData StructureData Structure Department of Computer ScienceDepartment of Computer Science

Page 12: โครงสร้างข้อมูลแบบ  Stack

.. ตั�วอย่�างการทำ�างานข้อง Push Stack..

• ทำ�าการ Push ข้�อมู�ลตั�อไปน # 9 5 7 2 8 เข้�า เก+บใน Stack

• ด้�ตั�วอย่�าง

Data StructureData Structure Department of Computer ScienceDepartment of Computer Science

Page 13: โครงสร้างข้อมูลแบบ  Stack

Pop Stack•Algorithm

1. ตัรวจสุอบว�า Stack ว�าง ? (โดียก็ารตัรวจ สุอบว�า Top เที่�าก็�บ 0)

- ถ้�า Stack ว�าง ให้�แสุดีงข้�อคืวามูว�า "Stack Empty" แล�วเล+ก็งาน- ถ้�า Stack ย�งมู� ข้�อมู�ล ให้�ที่%างานข้�อที่� 2 และ32. ให้�น%าข้�อมู�ลออก็จาก็ Stack3. ให้�ลดีคื�าข้อง Top ลงอ�ก็ 1

Data StructureData Structure Department of Computer ScienceDepartment of Computer Science

Page 14: โครงสร้างข้อมูลแบบ  Stack

Flowchart

Page 15: โครงสร้างข้อมูลแบบ  Stack

Program ตั�วอย่�างโปรแกรมูน #เป%น Stack ข้อง

Integer • Pascal

Procedure Pop ( Var X : Integer ) ;BeginIf Top=0 Then Writeln ( " Stack Empty " ) ElseBeginX := Stack [ Top ] ;Top := Top - 1 ;End;End;

Data StructureData Structure Department of Computer ScienceDepartment of Computer Science

Page 16: โครงสร้างข้อมูลแบบ  Stack

Program ตั�วอย่�างโปรแกรมูน #เป%น Stack ข้อง

Integer• C,C++

Pop ( int X ){if (Top = = 0) printf ( " Stack Empty " );else{X = Stack [ Top ] ;Top = Top - 1 ;}}

Data StructureData Structure Department of Computer ScienceDepartment of Computer Science

Page 17: โครงสร้างข้อมูลแบบ  Stack

Program ตั�วอย่�างโปรแกรมูน #เป%น Stack ข้อง

Integer• C,C++ ฟั'งก(ชั่�*นการ Pop

int pop()

{int r;if (top>-1){

r=stack[top];stack[top]=0;top--;return r;

}return -1;

}Data StructureData Structure Department of Computer ScienceDepartment of Computer Science

Page 18: โครงสร้างข้อมูลแบบ  Stack

ฟั'งก(ชั่�*นการ Pop

ก็ารเอาข้�อมู�ลออก็จาก็ Stack ไดี�น�'น ก็�เพิ่�ยงแคื�คื$นคื�าข้�อมู�ลตั�วที่� top น�'นช่�'อย��ก็ล�บไป็ แตั�ก็�อนที่�จะ Pop ไดี�น�'นจะตั�องดี�ดี�วยว�า top น�'นเป็!น -1 ห้ร$อไมู� ถ้�าเป็!น -1 ก็�แสุดีงว�าตัอนน�'น Stack ว�าง ให้�คื$นคื�า -1 ก็ล�บไป็ แตั�ถ้�า top >-1 แสุดีงว�ามู�มูมู�ข้�อมู�ลอย��ภายใน Stack ดี�งน�'น ให้�คื$นคื�าตั�วที่� top ช่�'อย��ก็ล�บไป็ และลดีคื�า top ลงอ�ก็ 1

Data StructureData Structure Department of Computer ScienceDepartment of Computer Science

Page 19: โครงสร้างข้อมูลแบบ  Stack

.. ตั�วอย่�างการทำ�างานข้อง Pop Stack..

• ทำ�าการ Pop ข้�อมู�ลตั�อไปน # 8 2 7 5 9 ออก จาก Stack

• ด้�ตั�วอย่�าง

Data StructureData Structure Department of Computer ScienceDepartment of Computer Science

Page 20: โครงสร้างข้อมูลแบบ  Stack

ตั�วอย่�างโปรแกรมูแสด้งการทำ�างานข้อง Stack ตั�วอย่�างทำ * 1

#include <stdio.h>#include <stdlib.h>#include <conio.h>

#define MAX 10

int stackdata[MAX];int top =-1;

int Push(int what){

if (top<MAX-1){

top++;stackdata[top] = what;return 1;

}return -1;

}

Data StructureData Structure Department of Computer ScienceDepartment of Computer Science

ตั�#งชั่!*อไฟัล(ว�า Stack1.c

Page 21: โครงสร้างข้อมูลแบบ  Stack

ตั�วอย่�างโปรแกรมูแสด้งการทำ�างานข้อง Stack ตั�วอย่�างทำ * 1 (ตั�อ)

int Pop(){

int r;if (top>-1){

r=stackdata[top];stackdata[top]=0;top--;return r;

}return -1;

}

Data StructureData Structure Department of Computer ScienceDepartment of Computer Science

Page 22: โครงสร้างข้อมูลแบบ  Stack

ตั�วอย่�างโปรแกรมูแสด้งการทำ�างานข้อง Stack ตั�วอย่�างทำ * 1 (ตั�อ)

void main(){

clrscr();Push(7);Push(12);Push(23);Push(2);Push(33);Push(10);printf("Pop=%d\n",Pop());printf("Pop=%d\n",Pop());printf("Pop=%d\n",Pop());printf("Pop=%d\n",Pop());

getch();}

Data StructureData Structure Department of Computer ScienceDepartment of Computer Science

RunPop = 10Pop = 33Pop = 2Pop = 23

Page 23: โครงสร้างข้อมูลแบบ  Stack

ตั�วอย่�างโปรแกรมูแสด้งการทำ�างานข้อง Stack ตั�วอย่�างทำ * 2 (ตั�อ)

#include <stdio.h>#include <stdlib.h>#include <conio.h>

#define MAX 10

int stackdata[MAX];int top =-1;

int Push(int what){

if (top<MAX-1){

top++;stackdata[top] = what;return 1;

}return -1;

}

Data StructureData Structure Department of Computer ScienceDepartment of Computer Science

ตั�#งชั่!*อไฟัล(ว�า Stack2.c

Page 24: โครงสร้างข้อมูลแบบ  Stack

ตั�วอย่�างโปรแกรมูแสด้งการทำ�างานข้อง Stack ตั�วอย่�างทำ * 2 (ตั�อ)

int Pop(){

int r;if (top>-1){

r=stackdata[top];stackdata[top]=0;top--;return r;

}return -1;

}

Data StructureData Structure Department of Computer ScienceDepartment of Computer Science

Page 25: โครงสร้างข้อมูลแบบ  Stack

ตั�วอย่�างโปรแกรมูแสด้งการทำ�างานข้อง Stack ตั�วอย่�างทำ * 2 (ตั�อ)

void main(){

clrscr();Push(7);Push(12);Push(23);Push(2);Push(33);Push(10);for (int i=0;i<8;i++){

printf("Pop=%d\n",Pop());}getch();

}

Data StructureData Structure Department of Computer ScienceDepartment of Computer Science

RunPop = 10Pop = 33Pop = 2Pop = 23Pop = 12Pop = 7Pop = -1Pop = -1

Page 26: โครงสร้างข้อมูลแบบ  Stack

ตั�วอย่�างโปรแกรมูแสด้งการทำ�างานข้อง Stack ตั�วอย่�างทำ * 3 (ตั�อ)#include <stdio.h>

#include <stdlib.h>#include <conio.h>

#define MAX 10

int stackdata[MAX];int top =-1;

int Push(int what){

if (top<MAX-1){

top++;stackdata[top] = what;return 1;

}return -1;

}

Data StructureData Structure Department of Computer ScienceDepartment of Computer Science

ตั�#งชั่!*อไฟัล(ว�า Stack3.c

Page 27: โครงสร้างข้อมูลแบบ  Stack

ตั�วอย่�างโปรแกรมูแสด้งการทำ�างานข้อง Stack ตั�วอย่�างทำ * 3 (ตั�อ)

int Pop(){

int r;if (top>-1){

r=stackdata[top];stackdata[top]=0;top--;return r;

}return -1;

}

Data StructureData Structure Department of Computer ScienceDepartment of Computer Science

Page 28: โครงสร้างข้อมูลแบบ  Stack

ตั�วอย่�างโปรแกรมูแสด้งการทำ�างานข้อง Stack ตั�วอย่�างทำ * 3 (ตั�อ)void main()

{clrscr();Push(7);Push(12);Push(23);Push(2);Push(33);Push(10);for (int i=0;i<50;i++){

int result=Pop();if (result==-1){

printf("Stack is empty\n");getch();break;

} printf("Pop=%d\n", result);

getch();}

}

Data StructureData Structure Department of Computer ScienceDepartment of Computer Science

RunPop = 10Pop = 33Pop = 2Pop = 23Pop = 12Pop = 7

Stack is empty

Page 29: โครงสร้างข้อมูลแบบ  Stack

การใชั่� สแตัค เพื่!*อแปลร�ปน�พื่จน(ทำางคณ�ตัศาสตัร(

ร�ป็แบบน+พิ่จน0ที่างคืณ+ตัศาสุตัร0• น+พิ่จน0 Infix คื$อ น+พิ่จน0ที่�เคืร$องห้มูาย

ดี%าเน+นก็าร (Operator) อย��ระห้ว�างตั�ว ดี%าเน+นก็าร (Operands) เช่�น A+B-C

• น+พิ่จน0 Prefix คื$อ น+พิ่จน0ที่� เคืร$องห้มูายดี%าเน+นก็าร (Operator)

อย��ห้น�าตั�วดี%าเน+นก็าร (Operands) เช่�น+-AB• น+พิ่จน0 Postfix คื$อ น+พิ่จน0ที่�

เคืร$องห้มูายดี%าเน+นก็าร (Operator) อย��ห้ล�งตั�วดี%าเน+นก็าร (Operands) เช่�น

AC*+

Data StructureData Structure Department of Computer ScienceDepartment of Computer Science

Page 30: โครงสร้างข้อมูลแบบ  Stack

ตั�วอย�างน+พิ่จน0คืณ+ตัศาสุตัร0ในร�ป็แบบตั�าง ๆ

• น+พิ่จน0 Infix น+พิ่จน0 Postfix น+พิ่จน0 Prefix

• A+B-C AB+C- - +ABC

• A+B*C-D/E ABC*+DE/- - +A*BC/DE

• A*B+C-D/E AB*C+DE/- - +*ABC/DE

Data StructureData Structure Department of Computer ScienceDepartment of Computer Science

Page 31: โครงสร้างข้อมูลแบบ  Stack

การแปลงน�พื่จน( Infix ให้�เป%น Postfix

• เข้�ยนโป็รแก็รมูสุ�งให้�เคืร$องคื%านวณตั�องเข้�ยนน+พิ่จน0ที่�ตั�องก็ารไป็ในตั�วโป็รแก็รมู ซ้2งน+พิ่จน0เห้ล�าน�'เร�ยก็ว�า น+พิ่จน0 Infix คื$อน+พิ่จน0ที่�มู�โอเป็อร0เรเตัอร0 (Operator) อย��ระห้ว�างโอเป็อร0แรนดี0 (Operand) ที่�'งสุอง เช่�น A+B เคืร$องห้มูาย

+ เป็!นโอเป็อร0เรเตัอร0ระห้ว�างโอเป็อร0แรนดี0 A และ B ซ้2งเห้�นว�าเป็!นน+พิ่จน0ที่�มูน#ษย0คื#�นเคืย ข้�อเสุ�ยข้องน+พิ่จน0 infix ที่�ที่ที่%าให้�คือมูไพิ่เลอร0ย#�งยาก็ คื$อล%าดี�บคืวามูสุ%าคื�ญข้องโอเป็อร0เรเตัอร0 (Precedence) ที่�ตั�างก็�น เช่�นเคืร$องห้มูายยก็ก็%าล�ง (ใช่� ^ ในก็ารเข้�ยนโป็รแก็รมู ) มู�คืวามูสุ%าคื�ญมูาก็ก็ว�าเคืร$องห้มูายคื�ณ และห้าร และเคืร$องห้มูายคื�ณและห้ารมู�คืวามูสุ%าคื�ญมูาก็ก็ว�าเคืร$องห้มูายบวก็และลบ

Data StructureData Structure Department of Computer ScienceDepartment of Computer Science

Page 32: โครงสร้างข้อมูลแบบ  Stack

การแปลงน�พื่จน( Infix ให้�เป%น Postfix

• เมู$อก็ารป็ระมูวลน+พิ่จน0 infix เป็!นไป็ดี�วยคืวามูยาก็ที่�ก็ารคื%านวณไมู�เป็!นไป็ตัามูล%าดี�บข้องเคืร$องห้มูายโอเป็อร0เรเตัอร0ที่�มู�ก็�อนห้ล�ง คือมูไพิ่เลอร0จ2งแป็ลงน+พิ่จน0 infix ให้�เป็!น postfix เสุ�ยก็�อน

• น+พิ่จน0 Postfix ก็�คื$อน+พิ่จน0ที่�มู�โอเป็อเรเตัอร0อย��ห้ล�งโอเป็อร0แรนดี0ที่�'งสุองข้องมู�น เช่�น

AB+ห้มูายถ้2ง A+B AB- ห้มูายถ้2ง A-B AB* ห้มูายถ้2ง A*B

Data StructureData Structure Department of Computer ScienceDepartment of Computer Science

Page 33: โครงสร้างข้อมูลแบบ  Stack

การแปลงน�พื่จน( Infix ให้�เป%น Postfix

• Operator คื$อเคืร$องห้มูายก็ระที่%า - *+ / ^

• Operand คื$อตั�วแป็รตั�าง ๆ A,B,C,D,E เช่�น A+B*C,(A*B)-C

Data StructureData Structure Department of Computer ScienceDepartment of Computer Science

Page 34: โครงสร้างข้อมูลแบบ  Stack

ล�าด้�บความูส�าค�ญ Operator

1. เคืร$องห้มูายยก็ก็%าล�ง ^ 2. เคืร$องห้มูายคื�ณก็�บห้าร * ,/ 3. เคืร$องห้มูายบวก็ก็�บลบ +,- 4. เคืร$องห้มูายวงเล�บ () ก็ระที่%าก็�อนเช่�น A+

(B*C) 5. เคืร$องห้มูายระดี�บเดี�ยวก็�นไมู�มู�วงเล�บให้�ที่%าจาก็

ซ้�ายไป็ข้วา เช่�น A+B+C  

Data StructureData Structure Department of Computer ScienceDepartment of Computer Science

Page 35: โครงสร้างข้อมูลแบบ  Stack

ตั�วอย�างน+พิ่จน0ที่างคืณ+ตัศาสุตัร0และล%าดี�บก็ารคื%านวณ

Data StructureData Structure Department of Computer ScienceDepartment of Computer Science

Page 36: โครงสร้างข้อมูลแบบ  Stack

อ�ลกอร�ทำ2มูการแปลงน�พื่จน( Infix เป%น น�พื่จน( Postfix

• เราสุามูารถ้แป็ลงน+พิ่จน0 Infix ให้�เป็!น Postfix ไดี�โดียอาศ�ยสุแตัคืที่�มู�คื#ณสุมูบ�ตั+ก็ารเข้�าห้ล�งออก็

ก็�อนห้ร$อ LIFO โดียมู�อ�ลก็อร+ที่2มูในก็ารแป็ลง น+พิ่จน0 ดี�งน�'

1. ถ้�าข้�อมู�ลเข้�า (input) เป็!นตั�วถ้�ก็ดี%าเน+นก็าร(operand) ให้�น%าออก็ไป็เป็!นผลล�พิ่ธ์0 (output)

2. ถ้�าข้�อมู�ลเข้�าเป็!นตั�วดี%าเน+นก็าร (operator) ให้�ดี%าเน+นก็ารดี�งน�'2.1 ถ้�าสุแตัคืว�าง ให้� push operator ลงในสุแตัคื

Data StructureData Structure Department of Computer ScienceDepartment of Computer Science

Page 37: โครงสร้างข้อมูลแบบ  Stack

อ�ลกอร�ทำ2มูการแปลงน�พื่จน( Infix เป%น น�พื่จน( Postfix

• 2.2 ถ้�าสุแตัคืไมู�ว�าง ให้�เป็ร�ยบเที่�ยบ operator ที่�เข้�ามูาก็�บoperator ที่�อย��ในตั%าแห้น�ง TOP ข้องสุแตัคื2.2.1 ถ้�า operator ที่�เข้�ามูามู�คืวามูสุ%าคื�ญมูาก็ก็ว�าoperator ที่�ตั%าแห้น�ง TOP ข้องสุแตัคืให้� push ลงสุแตัคื2.2.2 ถ้�า operator ที่�เข้�ามูามู�คืวามูสุ%าคื�ญน�อยก็ว�าห้ร$อ

เที่�าก็�บ operator ที่�อย��ในตั%าแห้น�ง TOP ข้องสุแตัคื ให้�pop สุแตัคืออก็ไป็เป็!นผลล�พิ่ธ์0 แล�วที่%าก็ารเป็ร�ยบเที่�ยบoperator ที่�เข้�ามูาก็�บ operator ที่�ตั%าแห้น�ง TOP ตั�อไป็

จะห้ย#ดีจนก็ว�า operator ที่�เข้�ามูาจะมู�คืวามูสุ%าคื�ญมูาก็ก็ว�าoperator ที่�ตั%าแห้น�ง TOP ข้องสุแตัคื แล�วจ2ง push operator ที่�เข้�ามูาน�'นลงสุแตัคื

Page 38: โครงสร้างข้อมูลแบบ  Stack

อ�ลกอร�ทำ2มูการแปลงน�พื่จน( Infix เป%น น�พื่จน( Postfix

• 3. ถ้�าข้�อมู�ลเข้�าเป็!นวงเล�บเป็:ดี ให้� push ลงสุแตัคื

4. ถ้�าข้�อมู�ลเข้�าเป็!นวงเล�บป็:ดี ให้� pop ข้�อมู�ล ออก็จาก็สุแตัคืไป็เป็!นผลล�พิ่ธ์0จนก็ว�าจะถ้2งวงเล�บ

เป็:ดี จาก็น�'นที่+'งวงเล�บเป็:ดีและป็:ดีที่+'งไป็

5. ถ้�าข้�อมู�ลเข้�าห้มูดี ให้� pop ข้�อมู�ลออก็จาก็ สุแตัคืไป็เป็!นผลล�พิ่ธ์0จนก็ว�าสุแตัคืจะว�าง

Data StructureData Structure Department of Computer ScienceDepartment of Computer Science

Page 39: โครงสร้างข้อมูลแบบ  Stack

ตั�วอย�างก็ารแป็ลงน+พิ่จน0 Infix เป็!น น+พิ่จน0 Postfix

• น�พื่จน( A + B * C

Page 40: โครงสร้างข้อมูลแบบ  Stack

น�พื่จน( (A * B) + (C / D)

Page 41: โครงสร้างข้อมูลแบบ  Stack

น�พื่จน( A / B + (C – D)

Page 43: โครงสร้างข้อมูลแบบ  Stack

ข้�#นตัอนการค�านวณจากน�พื่จน(Postfix

ในก็ารคื%านวณคื�า Postfix ที่�แป็ลงมูาแล�วตั�วแป็ลภาษาจะที่%า

ก็ารคื%านวณโดียใช่�โคืรงสุร�างสุแตัก็ช่�วยอ�ก็เช่�น ก็�น

ข้�'นตัอนในก็ารคื%านวณ1. อ�านตั�วอ�ก็ษรในน+พิ่จน0 Postfix จาก็ซ้�าย ไป็ข้วาที่�ละ

ตั�วอ�ก็ษร2. ถ้�าเป็!นตั�วถ้�ก็ดี%าเน+นก็าร ให้�ที่%าก็ารpush ตั�วถ้�ก็ดี%าเน+นก็าร

น�'นลงในสุแตัก็ แล�วก็ล�บไป็อ�านอ�ก็ษรตั�วให้มู�เข้�ามูา3. ถ้�าเป็!นตั�วดี%าเน+นก็าร ให้�ที่%าก็าร pop

คื�าจาก็สุแตัก็ 2 คื�า โดีย ตั�วแรก็เป็!นตั�ว ถ้�ก็ดี%าเน+นก็ารตั�วที่� 2 และตั�วที่� 1 ตัามู

ล%าดี�บ

Data StructureData Structure Department of Computer ScienceDepartment of Computer Science

Page 44: โครงสร้างข้อมูลแบบ  Stack

4. ที่%าก็ารคื%านวณ ตั�วถ้�ก็ดี%าเน+นก็ารตั�วที่�1 ดี�วยตั�วถ้�ก็ ดี%าเน+นก็ารตั�วที่� 2 โดียใช่�

ตั�วดี%าเน+นก็ารในข้�อ 35. ที่%าก็าร push ผลล�พิ่ธ์0ที่�ไดี�จาก็ก็าร

คื%านวณในข้�อ 4 ลงสุแตัก็6. ถ้�าตั�วอ�ก็ษรในน+พิ่จน0 Postfix ย�งอ�านไมู�ห้มูดีให้�ก็ล�บไป็ที่%า ข้�อ 1 ให้มู�

ข้�#นตัอนการค�านวณจากน�พื่จน(Postfix

Data StructureData Structure Department of Computer ScienceDepartment of Computer Science

Page 45: โครงสร้างข้อมูลแบบ  Stack

ตั�วอย่�าง ข้�'นตัอนก็ารคื%านวณจาก็น+พิ่จน0Postfix ABC+D-*E/

1. ABC+D-*E/

A

Push A

2. ABC+D-*E/

Push B

AB

ข้�#นตัอนการค�านวณจากน�พื่จน(Postfix

Data StructureData Structure Department of Computer ScienceDepartment of Computer Science

Page 46: โครงสร้างข้อมูลแบบ  Stack

3. ABC+D-*E/

A

Push C

4. ABC+D-*E/

1. Pop C2. Pop B3. B+C4. Push B+C A

B+CBC

ข้�#นตัอนการค�านวณจากน�พื่จน(Postfix

Data StructureData Structure Department of Computer ScienceDepartment of Computer Science

Page 47: โครงสร้างข้อมูลแบบ  Stack

5. ABC+D-*E/

A

Push D

6. ABC+D-*E/

1. Pop D2. Pop B+C3. B+C-D4. Push B+C-D A

B+C-DB+CD

ข้�#นตัอนการค�านวณจากน�พื่จน(Postfix

Data StructureData Structure Department of Computer ScienceDepartment of Computer Science

Page 48: โครงสร้างข้อมูลแบบ  Stack

7. ABC+D-*E/

A*B+C-D

8. ABC+D-*E/

Push E

A*B+C-DE

1. Pop B+C-D2. Pop A3. A*B+C-D4. Push A*B+C-D

ข้�#นตัอนการค�านวณจากน�พื่จน(Postfix

Data StructureData Structure Department of Computer ScienceDepartment of Computer Science

Page 49: โครงสร้างข้อมูลแบบ  Stack

9. ABC+D-*E/

A*B+C-D/E

1. Pop E2. Pop A*B+C-D3. A*B+C-D/E4. Push A*B+C-D/E

10. คื�าสุ#ดีที่�ายที่�อย��ในสุแตัก็คื$อคื%าตัอบที่�ตั�องก็าร

ข้�#นตัอนการค�านวณจากน�พื่จน(Postfix

Data StructureData Structure Department of Computer ScienceDepartment of Computer Science

Page 50: โครงสร้างข้อมูลแบบ  Stack

Data StructureData Structure Department of Computer ScienceDepartment of Computer Science

Page 51: โครงสร้างข้อมูลแบบ  Stack

Data StructureData Structure Department of Computer ScienceDepartment of Computer Science