スタックによるカッコマッチングの問題
スタック構造は後進先出の特徴がある.カッコマッチングの問題の説明:式に3つのカッコが含まれている場合:カッコ、四角カッコ、およびカッコは、互いにネストできます.
アルゴリズムの思想:検査アルゴリズムの中で1つのスタックを設置することができて、1つの括弧を読み込むたびに、左の括弧ならば、直接スタックに入って、一致する同類の右の括弧を待つ;読み込みが右かっこで、現在のスタックトップの左かっこと同じタイプの場合、両方が一致し、スタックトップの左かっこをポップアップします.そうしないと、合法的ではありません.また.入力シーケンスが読み終わっても、スタックに一致待ちの左かっこがある場合、または右かっこが読み込まれ、スタックに一致待ちの同じタイプの左かっこがない場合は、いずれも不正です.入力シーケンスとスタックが同時に空になった場合、すべてのカッコが完全に一致していることを示します.
プログラム:かっこマッチングアルゴリズム
ここではC++標準ライブラリ(STL)でスタックとキューを実現し,使いやすくし,いくつかの方法を提供することもできる.
アルゴリズムの思想:検査アルゴリズムの中で1つのスタックを設置することができて、1つの括弧を読み込むたびに、左の括弧ならば、直接スタックに入って、一致する同類の右の括弧を待つ;読み込みが右かっこで、現在のスタックトップの左かっこと同じタイプの場合、両方が一致し、スタックトップの左かっこをポップアップします.そうしないと、合法的ではありません.また.入力シーケンスが読み終わっても、スタックに一致待ちの左かっこがある場合、または右かっこが読み込まれ、スタックに一致待ちの同じタイプの左かっこがない場合は、いずれも不正です.入力シーケンスとスタックが同時に空になった場合、すべてのカッコが完全に一致していることを示します.
プログラム:かっこマッチングアルゴリズム
#include
#include
#define FALSE 0
#define TRUE 1
using namespace std;
// ,
typedef struct node{
char data;
struct node *next;
}linkStackNode;
typedef linkStackNode *linkstack;
int push(linkStack top,char x);
int* pop(linkStack top);
void bracketMatch(char *str);
bool match(char l,char r);
int main(){
char a[30];
cin.get(a,30); // getline。 , 。
bracketMatch(a);
}
int push(linkStack top,char x){ // x top
linkStackNode *temp;
temp=(linkStackNode *)malloc(sizeof(linkStackNode));
if(temp==NULL) return(FALSE);//
temp->data=x;
temp->next=top->next;
top->next=temp; //
return(TRUE); //
}
char* pop(linkStack top){// top ,
linkStackNode *temp;
char *x;
temp=top->next;
if(temp==NULL) return(FALSE);
top->next=temp->next;
*x=temp->data;
free(temp);
return(*x);
}
bool match(char l,char r){
bool judgematch=FALSE;
if((l='('&&r=')')||(l='['&&r=']')||(l='{'&&r='}'))
judgematch=TRUE;
return judgematch;
}
void bracketMatch(char *str){//str[] ,
linkStack s;
int i;
char ch;
for(i=0;str[i]!='\0';i++){
switch(str[i]){
case '(':
case '[':
case '{': //
push(&s,str[i]);
break;
case ')':
case ']':
case '}': //
if(s->next==NULL){ //
cout<next->data;
if(match(ch,str[i]))
pop(&s,&ch); //
else{
cout<next=NULL)
cout<
ここではC++標準ライブラリ(STL)でスタックとキューを実現し,使いやすくし,いくつかの方法を提供することもできる.