กองซ้อนเป็นโครงสร้างข้อมูลเชิงเส้น โดยที่ข้อมูลจะถูกแทรกและนำออกที่ปลายด้านเดียวเท่านั้น
อัลกอริทึม
ด้านล่างเป็นอัลกอริธึมสำหรับการกด ( ) −
- ตรวจสอบสแต็กโอเวอร์โฟลว์
if (top = = n-1) printf("stack over flow");
- มิฉะนั้น ให้แทรกองค์ประกอบลงในสแต็ก
top ++ a[top] = item
รับด้านล่างเป็นอัลกอริทึมสำหรับ ป๊อป ( ) −
- ตรวจสอบสแต็กอันเดอร์โฟลว์
if ( top = = -1) printf( "stack under flow");
มิฉะนั้น ให้ลบองค์ประกอบออกจากสแต็ก
item = a[top] top --
ด้านล่างนี้คืออัลกอริทึมสำหรับ ดิสเพลย์ ( ) −
if (top == -1) printf ("stack is empty");
มิฉะนั้น ให้ปฏิบัติตามอัลกอริธึมที่กล่าวถึงด้านล่าง
for (i=0; i<top; i++) printf ("%d", a[i]);
การประยุกต์ใช้สแต็ค
ให้เราเข้าใจการแปลงนิพจน์ของสแต็คในภาษาซี
นิพจน์ - เป็นการผสมผสานทางกฎหมายของตัวถูกดำเนินการและการดำเนินการ
ประเภทของนิพจน์
มีสามประเภทของนิพจน์ในภาษา C ซึ่งสามารถดำเนินการแปลงและประเมินค่าได้ อธิบายไว้ด้านล่าง −
-
นิพจน์ Infix - ตัวดำเนินการอยู่ระหว่างตัวถูกดำเนินการ ตัวอย่างเช่น A+B
-
นิพจน์คำนำหน้า - ตัวดำเนินการอยู่ก่อนตัวถูกดำเนินการ ตัวอย่างเช่น +AB
-
นิพจน์ Postfix - ตัวดำเนินการอยู่หลังตัวถูกดำเนินการ ตัวอย่างเช่น AB+
การประเมินนิพจน์ postfix
อัลกอริทึม
สแกนสตริงอินพุตจากซ้ายไปขวา
สำหรับแต่ละสัญลักษณ์อินพุต
-
หากเป็นตัวเลข ให้ดันไปที่สแต็ก
-
หากเป็นโอเปอเรเตอร์ ให้เปิดเนื้อหาส่วนใหญ่สองรายการบนสุดจากสแต็กและใช้โอเปอเรเตอร์กับเนื้อหาเหล่านั้น ต่อมาก็ดันผลไปกอง
-
หากสัญลักษณ์อินพุตคือ '\0' ให้ล้างสแต็ก
โปรแกรม
ต่อไปนี้เป็นโปรแกรม C สำหรับการประเมินนิพจน์ postfix -
#include<stdio.h> int top = -1, stack [100]; main ( ){ char a[50], ch; int i,op1,op2,res,x; void push (int); int pop( ); int eval (char, int, int); printf("enter a postfix expression:"); gets (a); for(i=0; a[i]!='\0'; i++){ ch = a[i]; if (ch>='0' && ch<='9') push('0'); else{ op2 = pop ( ); op1 = pop ( ); res = eval (ch, op1, op2); push (res); } } x = pop ( ); printf("evaluated value = %d", x); getch ( ); } void push (int n){ top++; stack [top] = n; } int pop ( ){ int res ; res = stack [top]; top--; return res; } int eval (char ch, int op1, int op2){ switch (ch){ case '+' : return (op1+op2); case '-' : return (op1-op2); case '*' : return (op1*op2); case '/' : return (op1/op2); } }
ผลลัพธ์
เมื่อโปรแกรมข้างต้นทำงาน มันจะให้ผลลัพธ์ดังต่อไปนี้ −
Run 1: enter a postfix expression:45+ evaluated value = 9 Run 2: enter a postfix expression: 3 5 2 * + evaluated value = 13