stack n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Stack PowerPoint Presentation
Download Presentation
Stack

Loading in 2 Seconds...

play fullscreen
1 / 43

Stack - PowerPoint PPT Presentation


  • 121 Views
  • Uploaded on

Stack. Bansomdej Chaopraya Rajabhat University. เนื้อหา. โอเปอร์เรชั่นของสแตค โพลิช โนเทชั่น การแปลงสมการจาก Infix เป็น Postfix การหาผลลัพธ์จากนิพจน์ Postfix คิว รีเคอร์ซีฟ สรุป. Stack Slide# 2. สแตค.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Stack' - ronna


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
stack

Stack

Bansomdej Chaopraya Rajabhat University

slide2
เนื้อหา
  • โอเปอร์เรชั่นของสแตค
  • โพลิช โนเทชั่น
    • การแปลงสมการจาก Infix เป็น Postfix
    • การหาผลลัพธ์จากนิพจน์ Postfix
  • คิว
  • รีเคอร์ซีฟ
  • สรุป

Stack Slide#2

slide3
สแตค

สแตค เป็นรูปแบบหนึ่งในการจัดเรียงข้อมูลแบบเชิงเส้น ที่มีการใส่ข้อมูลเข้า และนำข้อมูลออกเพียงด้านใดด้านหนึ่ง มีกระบวนการทำงานแบบ First In Last Out : FILOตัวอย่างที่ดีที่สุดของการจัดเรียงแบบสแตค คือการวางซ้อนกันของจานซึ่งจานที่วางก่อนจะอยู่ข้างล่าง และจานที่ถูกวางที่หลังจะอยู่ข้างบน เวลาที่นำจานออกมาใช้ ก็จะใช้ด้านบนสุดก่อน ดังตัวอย่าง

Stack Slide#3

slide4
ตัวอย่างโครงสร้างแบบสแตคตัวอย่างโครงสร้างแบบสแตค

ข้อมูลที่ป้อนลงมาเป็นตัวสุดท้าย

ข้อมูลที่ป้อนลงมาเป็นตัวแรก

Stack Slide#4

slide5
โอเปอร์เรชั่นของสแตค

โอเปอร์เรชั่นของสแตคมี 2 โอเปอร์เรชั่น คือ

  • การนำข้อมูลเข้าสู่สแตค Push
  • การนำข้อมูลออกจากสแตคPop

Stack Slide#5

slide6
การนำข้อมูลเข้าสู่สแตค : Push

สำหรับการนำข้อมูลเข้าสู่สแตคนั้นเรียกว่าการ Push การนำข้อมูลเข้าสู่สแตค แสดงได้ดังตัวอย่างตัวไปนี้

ตัวอย่าง ต้องการนำข้อมูลต่อไปนี้เข้าสู่ สแตคที่ว่างเปล่า กำหนดข้อมูลดังต่อไปนี้A, B, C,D

Stack Slide#6

slide7
ตัวอย่าง

Push  A

Max Stack

Top = 1

Top = 0

Stack Slide#7

slide8
ตัวอย่าง

Push  B

Max Stack

Top = 2

Top = 1

Stack Slide#8

slide9
ตัวอย่าง

Push  C

Max Stack

Top = 3

Top = 2

Stack Slide#9

slide10
ตัวอย่าง

Push  D

Max Stack

Top = 4

Top = 3

Stack Slide#10

push stack
โปรแกรม Push ข้อมูลลง Stack

/* pushes item on the stack */

void push ( int data )

{

if ( top == MAX - 1 )

printf(”\nStack is full“);

else

{

top++ ;

stack[ top ] = data ;

}

}

Stack Slide#11

slide12
การนำข้อมูลออกจากสแตค : Pop

สำหรับการนำข้อมูลออกจากสแตคนั้นเรียกว่าการ Pop การนำข้อมูลออกจากสแตค แสดงได้ดังตัวอย่างตัวไปนี้

ตัวอย่าง ต้องการนำข้อมูล A, B, C,D เข้าออกจากสแตค

Stack Slide#12

slide13
ตัวอย่าง

Pop  D

Max Stack

Top = 4

Top = 3

Stack Slide#13

slide14
ตัวอย่าง

Pop  C

Max Stack

Top = 3

Top = 2

Stack Slide#14

slide15
ตัวอย่าง

Pop  B

Max Stack

Top = 2

Top = 1

Stack Slide#15

slide16
ตัวอย่าง

Pop  A

Max Stack

Top = 1

Top = 0

Stack Slide#16

pop stack
โปรแกรม POP ข้อมูลออกจาก Stack

/* pops off the items from the stack */

int pop( )

{

int data ;

if ( top == -1 )

{

printf("\nStack is empty“);

return ( -1 ) ;

}

else

{     

data = stack[ top ] ;

top-- ;

return ( data ) ;

}

}

Stack Slide#17

slide18

สแตก

  • โอเปอร์เรชั่นของสแตก
  • โพลิช โนเทชั่น
    • การแปลงสมการจาก Infix เป็น Postfix
    • การหาผลลัพธ์จากนิพจน์ Postfix
  • คิว
  • สรุป

บทที่ 4 โครงสร้างข้อมูลแบบสแตก และคิว

slide19
โครงสร้างข้อมูลแบบสแตก และคิว
  • เป็นโครงสร้างข้อมูลแบบเชิงเส้น
  • โดยลักษณะของโครงสร้างแบบสแตก ข้อมูลถูกจัดเข้าก่อนจะออกที่หลัง เรียกว่า “First in last out” / “FILO”
  • โดยลักษณะของโครงสร้างแบบคิว ข้อมูลถูกจัดเข้าก่อนจะ
  • นำออกก่อน เรียกว่า “First in first out” / “FIFO”
  • โดยมีการนำโครงสร้างพื้นฐานที่เป็นอาร์เรย์ หรือ ลิงค์ลิสต์ มาใช้ในการจัดการข้อมูล
chapter 4 stack and queue
Chapter 4 Stack and Queue

4.2 Stack

Stackคือ รูปแบบในการจัดเรียงข้อมูลแบบเชิงเส้น

(linear structure)

ตัวอย่าง การจัดเรียงข้อมูลแบบสแตก

- การจัดวางซ้อนกันของจาน / สิ่งของที่วางซ้อนกัน

chapter 4 stack and queue1
Chapter 4 Stack and Queue

4.2.1 Operations on Stack

สำหรับการจัดเรียงข้อมูล การนำเข้าข้อมูลในสแตกจะ

เรียกว่า พุช (Push) การนำข้อมูลออกจากสแตก เรียกว่า

พอพ (Pop) ด้านของข้อมูลที่มีการนำข้อมูลเข้าออกเรียกว่า

ท็อป (Top)

(a) A, B, C, D, E

(b) A Push: A

(c)A, B, C, D, E

(d) A, B, C, D Pop: E

Top

Top

chapter 4 stack and queue2
Chapter 4 Stack and Queue

การนำข้อมูลออกจากสแตก

Operations on Stack

  • A, B, C, D, E
  • A, B, C, D Pop : E
  • A, B, CPop : D
  • A, B Pop : C
  • A, B, D Push : D
  • A, B, D, E Push : E

Top

E Push : E

Top

Top

E, D Push : D

Top

Top

E, D

Top

Top

E Pop : D

Top

Top

Pop : E

Top

STACK X

STACK Y

chapter 4 stack and queue3
Chapter 4 Stack and Queue

Operations on Stackการพิจารณาเกี่ยวกับหน่วยความจำ

การพิจารณาหน่วยความจำที่ใช้และจำนวนครั้งของการ

OVERFLOW ในกรณีที่จะ Push เข้าสแตก จนครบ MAXSTK

- เกิด OVERFLOWบ่อย เมื่อเตรียมหน่วยความจำน้อย

- จะไม่เกิด OVERFLOW เมื่อเตรียมหน่วยความจำมาก

การใช้หน่วยความจำร่วมกันระหว่าง 2 สแตก

MAXSTK1 + MAXSTK2

1 23 4 n-3 n-2 n-1 n

……

STACK2

STACK1

การใช้สแตกร่วม

chapter 4 stack and queue4
Chapter 4 Stack and Queue

Operations on Stack

Program Main

begin

call sub 1

end;

Program sub 1

begin

call sub 2

end;

Program sub2

begin

call sub 3

end;

Program sub 3

begin

end;

Sub 2

Sub 1

Sub 1

Sub 1

Main

Main

Main

Main

Main

(a)

(b)

(c)

(d)

(e)

(f)

การเก็บข้อมูลสแตกของโปรแกรม Main

chapter 4 stack and queue5
Chapter 4 Stack and Queue

4.2.2 Implementation of Stack as Static Array

สแตกสามารถแสดงได้หลายวิธีโดยรูปแบบคอมพิวเตอร์

การใช้อาร์เรย์เป็นวิธีหนึ่ง โดยสแตกจะมีตัวแปรทำหน้าที่เป็น

ตัวบอกจุดสูงสุดของสแตก คือ Top

MAXSTK

Top = 0; Top = NULL

chapter 4 stack and queue6
Chapter 4 Stack and Queue

Implementation of Stack as Static Array

Procedure PUSH(STACK,TOP,MAXSTK,ITEM)

ขบวนการนี้เป็นการนำ ITEM ใส่ใน STACK

if TOP = MAXSTK, then : Print OVERFLOW and RETURN

Set TOP = TOP +1

Set STACK[TOP] : = ITEM

return.

Procedure POP(STACK,TOP,ITEM)

ขบวนการนี้เป็นการลบข้อมูล ITEM ที่ TOP ของ STACK

if TOP = 0, then : Print OVERFLOW and RETURN

Set ITEM : = STACK[TOP]

Set TOP : = TOP - 1

return.

polish notation
โพลิช โนเทชั่น (Polish Notation)

โพลิช โนเทชั่น เป็นวิธีการในการจัดรูปแบบของสมการใหม่ โดยแสดงสมการทางคณิตศาสตร์ให้อยู่ในรูปเครื่องหมายทางคณิตศาสตร์อยู่ก่อนตัวถูกดำเนินการ (โพลิช โนเทชั่น เป็นชื่อที่ตั้งขึ้นมาตามชื่อของ ตำรวจเจน ลูคาวิคซ์ ผู้คิดให้เครื่องหมายอยู่หน้าตัวดำเนินการ นี้)

ตัวอย่างของ สมการ โพลิช โนเทชั่น

2*3 แปลงเป็นสมการโพลิช โนเทชั่น เท่ากับ *23

Stack Slide#27

chapter 4 stack and queue7
Chapter 4 Stack and Queue

การกำหนดลำดับความสำคัญของการทำงานในการคำนวณคณิตศาสตร์

2+3*5

สูงสุด : ยกกำลัง (^)

สูงถัดมา : คูณ (*) หาร (/)

ต่ำสุด : บวก (+) ลบ (-)

ในกรณีเป็นผู้กำหนดความสำคัญโดยใช้วงเล็บ()

(2+3)*5

ตัวเลข เรียกว่า Operand

chapter 4 stack and queue8
Chapter 4 Stack and Queue

โพลิช โนเทชั่น เป็นวิธีการจัดรูปแบบสมการใหม่ การเขียนเครื่องหมาย อยู่หน้าตัวดำเนินการ เช่น

2*3 เขียนเป็น *23

2+3 เขียนเป็น +23

ในกรณีมีเครื่องหมายหลายตัว

(5+2)*3 = (+52)*3 = *+523

(5^2)+((4*6)/3) = (^52)+((*46)/3) =

(^52)+(/*463) = +^52/*463

การเขียนสมการแบบนี้ไม่ต้องใช้วงเล็บและลำดับความสำคัญ

slide30
ศัพท์ที่ควรทราบ

Operand คือ ตัวถูกดำเนินการใดๆ เช่น A, B, C

Operator คือ เครื่องหมายในการดำเนินการ เช่น + , -, *, /

Infix คือสมการที่อยู่ในรูปของ Operand คั่นด้วยOperator

Prefix คือสมการที่อยู่ในรูปของ Operator แล้วตามด้วย Operand

Postfix คือสมการที่อยู่ในรูปของ Operand แล้วตามด้วย Operator

Infix : A+B

Prefix : +AB

Postfix : AB+

Stack Slide#30

slide31
ลำดับความสำคัญของเครื่องหมายทางคณิตศาสตร์ลำดับความสำคัญของเครื่องหมายทางคณิตศาสตร์

Stack Slide#31

infix postfix
การแปลงสมการ Infix เป็นสมการ Postfix

1. ถ้าอินพุตเป็นตัว Operand ให้นำไปไว้ที่เอาท์พุต

2. ถ้าอินพุตเป็นตัว Operator ให้ทำดังนี้

2.1 นำ Operator ตัวนั้นเข้าสู่สแตค ถ้าสแตคว่างเปล่าจะถือว่าเป็น opst : Operator Stack

2.2 ถ้า สแตคนั้นไม่ว่างนั่นคือมีOperator อยู่แล้วให้เปรียบเทียบ Precedence ของ Operator ที่เป็นอินพุต กับ Precedence ของ Operator ที่อยู่ในสแตค หากพบว่า

Stack Slide#32

infix postfix1
การแปลงสมการ Infix เป็นสมการ Postfix

2.2.1 ถ้าพบว่า ค่าOperator ในอินพุตน้อยกว่าหรือเท่ากับให้ทำการ PopOperatorใน Stack ออกมายัง Output

2.2.2 ถ้าพบว่า ค่าOperator ในอินพุตมากกว่าให้นำ Operatorนั้นบรรจุลงใน Stack

2.2.3 ถ้าเป็นเครื่องหมาย ( ให้ push ลงสู่ Stack จนกว่าจะพบเครื่องหมาย ) หรือ stack จะว่าง

2.2.4 ถ้าเป็นเครื่องหมาย ) ให้ Pop ข้อมูลทั้งหมดรวมทั้ง Operator ออกมาแล้วนำไปไว้ที่เอาท์พุต

Stack Slide#33

1 a b c postfix
ตัวอย่างที่ 1 จงแปลง A+B+Cให้เป็น Postfix

Stack Slide#34

2 a b c d e postfix
ตัวอย่างที่ 2 จงแปลง A+B/C*D-E ให้เป็น Postfix

Stack Slide#35

slide36

+

A

+

A

B

+

A

B

*

A

B

C

+

A

B

C

+

*

(

+

A

B

C

+

*

(

+

A

B

C

+

D

*

(

+

A

B

C

+

D

*

*

(

+

A

B

C

+

D

E

*

(

+

+

A

B

C

+

D

E

*

*

+

A

B

C

+

D

E

*

F

*

+

A

B

C

+

D

E

*

F

+

*

+

A

B

C

+

D

E

*

F

+

*

*

A

B

C

+

D

E

*

F

+

G

*

A + B * C + ( D * E + F ) * G

ตัวอย่างที่ 3

INPUT STACK OUTPUT

A

+

A

B

A

+

B

*

C

+

(

D

*

E

+

F

)

*

G

*

C

+

+

*

(

D

*

E

+

*

F

+

*

G

*

+

Stack Slide#36

infix postfix2
จงแปลงนิพจน์ Infix ต่อไปนี้ เป็นนิพจน์ Postfix

[1] A + B * ( C ^ D * E / F ) – G

[2] A ^ 2 – 4 * ( A * C + ( E + ( F – G ) – H ) )

[3] A ^ B * C / D * ( E ^ 3 ^ 2 )

Stack Slide#37

postfix
การหาผลลัพธ์จากนิพจน์ Postfix

[1] เมื่ออ่านพบ operand ให้ push ลง stack

[2] ถ้าเป็น operator ให้ pop ตัว operand ออกมา 2 ตัว เพื่อคำนวณ

[3] ผลลัพธ์ที่ได้ทำการ push ลง stack

Stack Slide#38

slide39
ตัวอย่างการหาผลลัพธ์

ตัวอย่าง กำหนดให้ A=5 , B=2 , C=3 จงหาผลลัพธ์ของ AB+C+

Stack Slide#39

postfix1
จงหาค่าของนิพจน์ Postfix ต่อไปนี้

กำหนดให้ A=5, B=3, C=2, D=1, E=2, F=3, G=1, H=2

[1] AB+CD-*

[2] ABC*+DE*F+G*+

[3] ให้หาค่านิพจน์ postfix ที่ได้จากโจทย์ในแบบฝึกหัดที่

ผ่านมา

Stack Slide#40

slide41
แบบทดสอบการประยุกต์ใช้งานสแตคแบบทดสอบการประยุกต์ใช้งานสแตค
  • เขียนโปรแกรมการแปลงนิพจน์ Infix เป็น Postfix

Stack Slide#41

chapter 4 stack and queue9
Chapter 4 Stack and Queue

4.2.3 Arithmetic Expression Notation

การกำหนดลำดับความสำคัญของการทำงานในการ

คำณวนคณิตศาสตร์

2+3*5

สูงสุด : ยกกำลัง (^)

สูงถัดมา : คูณ (*) หาร (/)

ต่ำสุด : บวก (+) ลบ (-)

ในกรณีเป็นผู้กำหนดความสำคัญโดยใช้วงเล็บ()

(2+3)*5

ตัวเลข เรียกว่า Operand

chapter 4 stack and queue10
Chapter 4 Stack and Queue

Arithmetic Expression Notation

โพลิช โนเทชั่น เป็นวิธีการจัดรูปแบบสมการใหม่ การ

เขียนเครื่องหมายอยู่หน้าตัวดำเนินการ เช่น

2*3 เขียนเป็น *23

2+3 เขียนเป็น +23

ในกรณีมีเครื่องหมายหลายตัว

(5+2)*3 = (+52)*3 = *+523

(5^2)+((4*6)/3) = (^52)+((*46)/3) =

(^52)+(/*463) = +^52/*463

การเขียนสมการแบบนี้ไม่ต้องใช้วงเล็บและลำดับความ

สำคัญ