Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

อธิบายการแปลงนิพจน์สแต็คในภาษาซี


กองซ้อนเป็นโครงสร้างข้อมูลเชิงเส้น โดยที่ข้อมูลจะถูกแทรกและนำออกที่ปลายด้านเดียวเท่านั้น

อัลกอริทึม

ด้านล่างนี้เป็นอัลกอริทึมสำหรับ พุช ( )

  • ตรวจสอบสแต็กโอเวอร์โฟลว์
if (top = = n-1)
printf("stack over flow");
  • มิฉะนั้น ให้แทรกองค์ประกอบลงในสแต็ก
top ++
a[top] = item

รับด้านล่างเป็นอัลกอริทึมสำหรับ ป๊อป ( )

  • ตรวจสอบสแต็กอันเดอร์โฟลว์
if (top = = -1)
printf("stack under flow");

มิฉะนั้น ให้ลบองค์ประกอบออกจากสแต็ก

item = a[top]
top --

ด้านล่างเป็นอัลกอริธึมสำหรับ Display ( ) −

if (top == -1)
printf ("stack is empty");

มิฉะนั้น ให้ปฏิบัติตามอัลกอริธึมที่กล่าวถึงด้านล่าง

for (i=0; i<top; i++)
printf ("%d", a[i]);

การประยุกต์ใช้สแต็ค

ให้เราเข้าใจการแปลงนิพจน์ของสแต็คในภาษาซี

นิพจน์ − เป็นการรวมตัวถูกดำเนินการและการดำเนินการทางกฎหมายร่วมกัน

ประเภทของนิพจน์

มีสามประเภทของนิพจน์ในภาษา C ซึ่งสามารถดำเนินการแปลงและประเมินผลได้ อธิบายไว้ด้านล่าง −

  • นิพจน์ Infix - ตัวดำเนินการอยู่ระหว่างตัวถูกดำเนินการ ตัวอย่างเช่น A+B

  • นิพจน์คำนำหน้า - ตัวดำเนินการอยู่ก่อนตัวถูกดำเนินการ ตัวอย่างเช่น +AB

  • นิพจน์ Postfix - ตัวดำเนินการอยู่หลังตัวถูกดำเนินการ ตัวอย่างเช่น AB+

อธิบายการแปลง infix เป็น postfix และ infix เป็น prefix อธิบายไว้ด้านล่าง -

Infix to postfix    Infix to prefix
A+ B*C               A+ B*C
A+ BC *              A+ *BC
ABC* +               +A*BC

ตัวอย่างเช่น

แปลงคำนำหน้า A+B*C / D-E+F เป็นคำนำหน้าและคำนำหน้า

Infix to prefix            Infix to postfix
A +B*C / D-E+F            A +B*C / D-E+F
A +*BC / D-E+F            A +BC* / D-E+F
A + / *BCD -E+F           A +BC*D /-E+F
+A /*BCD -E +F            ABC *D /+ -E+F
-+A/*BCDE +F              ABC *D/ +E- +F
+ - +A/*BCDEF             ABC *D / +E –F+

อัลกอริทึม

สแกนอินพุตสตริงจากซ้ายไปขวาและทำตามขั้นตอนที่ระบุด้านล่าง -

  • ขั้นตอนที่ 1 - หากสัญลักษณ์อินพุตเป็นตัวถูกดำเนินการ ให้พิมพ์ไปที่จอภาพ

  • ขั้นตอนที่ 2 - หากสัญลักษณ์อินพุตคือ '('จากนั้นให้ดันไปที่สแต็ก

  • ขั้นตอนที่ 3 - หากอินพุตของสัญลักษณ์คือ ')' ให้เปิดเนื้อหาทั้งหมดของสแต็กออกจนกว่าคุณจะได้รับ '('.

  • ขั้นตอนที่ 4 - หากสัญลักษณ์อินพุตเป็นตัวดำเนินการ ให้ตรวจสอบลำดับความสำคัญของตัวดำเนินการที่ด้านบนของสแต็กด้วยสัญลักษณ์อินพุตปัจจุบัน

หากลำดับความสำคัญสูงสุดของด้านบนของสแต็กมากกว่าหรือเท่ากับลำดับความสำคัญของสัญลักษณ์ปัจจุบัน ให้เปิดเนื้อหาของสแต็กออกมาและใส่สัญลักษณ์ปัจจุบันลงในสแต็ก

มิฉะนั้น ให้ดันโอเปอเรเตอร์ไปที่สแต็ก

  • ขั้นตอนที่ 5 - หากสัญลักษณ์อินพุตคือ '\0' ให้เปิดเนื้อหาของสแต็กออกมาจนกว่าจะว่างเปล่า

การแปลง infix เป็น post fix โดยใช้ stack ด้านล่าง -

อธิบายการแปลงนิพจน์สแต็คในภาษาซี


อธิบายการแปลงนิพจน์สแต็คในภาษาซี