?? 3.19.c
字號:
◆3.19④ 假設一個算術表達式中可以包含三種括號:圓括號"(" 和
")",方括號"["和"]"和花括號"{"和"}",且這三種括號可按任意的
次序嵌套使用(如:…[…{…}…[…]…]…[…]…(…)…)。編寫判別給定表達
式中所含括號是否正確配對出現的算法(已知表達式已存入數據元素
為字符的順序表中)。
實現下列函數:
Status MatchCheck(SqList exp);
/* 順序表exp表示表達式; */
/* 若exp中的括號配對,則返回TRUE,否則返回FALSE */
順序表類型定義如下:
typedef struct {
ElemType *elem;
int length;
int listsize;
} SqList; // 順序表
Stack是一個已實現的棧。
可使用的相關類型和函數:
typedef char SElemType; // 棧Stack的元素類型
Status InitStack(Stack &s);
Status Push(Stack &s, SElemType e);
Status Pop(Stack &s, SElemType &e);
Status StackEmpty(Stack s);
Status GetTop(Stack s, SElemType &e);
Status MatchCheck(SqList exp)
/* 順序表exp表示表達式; */
/* 若exp中的括號配對,則返回TRUE,否則返回FALSE */
{
char c;
int i;
Stack s;
InitStack(s); //建立棧s儲存左括號
for(i=0;i<exp.length;i++)
{
if(exp.elem[i]=='('||exp.elem[i]=='['||exp.elem[i]=='{') Push(s,exp.elem[i]);
else if(exp.elem[i]==')'||exp.elem[i]==']'||exp.elem[i]=='}')
{
if(StackEmpty(s)) return FALSE;
GetTop(s,c);
if(exp.elem[i]==')'&&c!='(') return FALSE;
if(exp.elem[i]==']'&&c!='[') return FALSE;
if(exp.elem[i]=='}'&&c!='{') return FALSE; //必須與當前棧頂括號匹配
Pop(s,c);
}
}//for
if(!StackEmpty(s)) return FALSE;
return TRUE;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -