由於是小白,所以剛開始沒有用已有的出棧與入棧函式以及出佇列與入佇列函式,而是自己寫的。如果**不對的話,歡迎指正。
#include #include #include #define stack_init_size 100
#define stackincerement 10
//棧的順序儲存表示
typedef struct sqstack;
//單鏈佇列--佇列的鏈式儲存表示
typedef struct qnodeqnode, *queueptr;
typedef struct linkqueue;
// 棧的操作
int initstack (sqstack *s);
int push (sqstack *s, char c);
int pop (sqstack *s,char *c);
// 佇列的操作
int initqueue (linkqueue *q);
int destroyqueue (linkqueue *q);
int enqueue (linkqueue *q, char c);
int dequeue (linkqueue *q, char *c);
// 其它操作
int match (char *str); // 判斷括號是否匹配或者無括號
void medal (sqstack *s, sqstack *s1); // 最後處理
int main ()
; sqstack devil, s1;
linkqueue temp;
initstack (&devil);
initstack (&s1);
initqueue (&temp);
scanf("%s", str);
if ( match(str) )
else break;
}while (temp.front->next != temp.rear)
dequeue (&temp, &ch1);
push (&s1, ch1);}}
medal (&devil, &s1);
while ( pop(&devil,&ch) )
printf ("%c", ch);
free(devil.base);
free(s1.base);
destroyqueue(&temp);
}return 0;
} // 對棧的操作
int initstack (sqstack *s)
int push (sqstack *s, char c)
* s->top ++ = c;
return 1;
}int pop (sqstack *s,char *c)
// 對佇列的操作
int initqueue (linkqueue *q)
int enqueue (linkqueue *q, char c)
int dequeue (linkqueue *q, char *c)
int destroyqueue (linkqueue *q)
return 1;
} //檢查括號是否匹配的函式實現
int match (char *str) //函式開始
}if (q.base == q.top && judge)
else if (judge == 0)
return 1;
else
} //函式結束
// 最後處理
void medal (sqstack *s, sqstack *s1)
} }
魔王語言解釋
問題描述 有乙個魔王總是使用自己的一種非常精練而抽象的語言講話,沒人能聽的懂。但他的語言是可以逐步解釋 能懂得語言的,因為他的語言是由以下兩種形式的規則由人的語言逐 步抽象上去的 1 1 2.n 2 1 2.n n n 1.1 在這兩種形式中,從左到右均表示解釋 從右到左表示抽象。試寫乙個魔王解釋系...
資料結構 魔王語言解釋
一 需求分析 1 有乙個魔王總是使用自己的一種非常精煉而抽象的語言講話,沒有人能聽得懂,但他的語言是可以逐步解釋 能聽懂的語言,因為他的語言是由以下兩種形式的規則由人的語言逐步抽象上去的 1 1 2 m 2 1 2 n n n 1 1 在這兩種形式中,從左到右均表示解釋。試寫乙個魔王語言的解釋系統,...
棧和佇列 魔王語言解釋
1 作業系統 windows 10 x64 1 首先實現棧和佇列的基本操作,棧和佇列都採用順序儲存結構,佇列通過取模形成迴圈佇列。class stack status push char a status pop char a class queue status enqueue char e st...