数据结构习题及答案

源代码在线查看: 3.19.c

软件大小: 52 K
上传用户: GUAIGUAICHENGTI
关键词: 数据结构
下载地址: 免注册下载 普通下载 VIP

相关代码

				◆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				  {
				    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;
				
				
				}
							

相关资源