初学数据结构,求助实验C语言程序,请附带尽量详细说明,十分感激! 30
主要实验内容及要求:掌握栈的基本结构和操作方法,并能利用其解决实际问题。要求:•假设表达式中允许包含三种括号:大括号、圆括号和方括号,其嵌套的顺序任意,即([...
主要实验内容及要求:
掌握栈的基本结构和操作方法,并能利用其解决实际问题。
要求:
• 假设表达式中允许包含三种括号:大括号、圆括号和方括号,其嵌套的顺序任意,即([]({}))或[({[][]})]等都为正确的格式,而[(])}为不正确的格式。利用栈编程序检验表达式中的括号是否合法。
• 提示:
• 1,先实现栈的基本操作:初始化,入栈,出栈等。
• 2,每读入一个括号,若是右括号,则或者是置于栈顶的左括号得以消解,或者是不合法的情况;若是左括号,则直接入栈。
3,可用顺序栈或者链栈实现。 展开
掌握栈的基本结构和操作方法,并能利用其解决实际问题。
要求:
• 假设表达式中允许包含三种括号:大括号、圆括号和方括号,其嵌套的顺序任意,即([]({}))或[({[][]})]等都为正确的格式,而[(])}为不正确的格式。利用栈编程序检验表达式中的括号是否合法。
• 提示:
• 1,先实现栈的基本操作:初始化,入栈,出栈等。
• 2,每读入一个括号,若是右括号,则或者是置于栈顶的左括号得以消解,或者是不合法的情况;若是左括号,则直接入栈。
3,可用顺序栈或者链栈实现。 展开
1个回答
展开全部
1.建个堆栈,遇到( [ {就压栈,遇到) ] } 就看现在栈顶里放的跟遇到的是不是匹配。是,出栈,不是,报错。
2.如果遇到) ] } 栈为空,报错
3.所有输入完成时栈不为空,报错
const
ok='OK';
wrong='Wrong';
ans:array[false..true]of string=(wrong,ok);
zuo=['[','('];you=[')',']'];
var
s:string;
i,j,k,n_b,n_e,m_b,m_e,top,zz:integer;
a:array[1..10]of char;
function zhankong:boolean;
begin
exit(top=0);
end;
function chuzhan:char;
begin
dec(top);
exit(a[top+1]);
end;
procedure jinzhan(c:char);
begin
inc(top);a[top]:=c;
end;
function jishuan:boolean;
var
c:char;
begin
repeat
if s[zz]in zuo then jinzhan(s[zz]);
if (s[zz]in you) and zhankong then exit(false);
if s[zz]in you then
begin c:=chuzhan;
if ((c='(')and(s[zz]=')'))or((c='[')and(s[zz]=']'))
then zz:=zz else exit(false);
end;
inc(zz);
until (zhankong)or(zz=length(s)+1);
if not( zhankong) then if not(zz=length(s)+1) then exit(false);
exit(true);
end;
begin
readln(s);
n_b:=0;
n_e:=0;
m_b:=0;
m_e:=0;
for i:=1 to length(s) do
case s[i] of
'(':inc(n_b);
')':inc(n_e);
'[':inc(m_b);
']':inc(m_e);
end;
if (n_b<>n_e)or(m_b<>m_e) then begin writeln(wrong);halt; end;
top:=0;zz:=1;
writeln(ans[jishuan]);
end.
2.如果遇到) ] } 栈为空,报错
3.所有输入完成时栈不为空,报错
const
ok='OK';
wrong='Wrong';
ans:array[false..true]of string=(wrong,ok);
zuo=['[','('];you=[')',']'];
var
s:string;
i,j,k,n_b,n_e,m_b,m_e,top,zz:integer;
a:array[1..10]of char;
function zhankong:boolean;
begin
exit(top=0);
end;
function chuzhan:char;
begin
dec(top);
exit(a[top+1]);
end;
procedure jinzhan(c:char);
begin
inc(top);a[top]:=c;
end;
function jishuan:boolean;
var
c:char;
begin
repeat
if s[zz]in zuo then jinzhan(s[zz]);
if (s[zz]in you) and zhankong then exit(false);
if s[zz]in you then
begin c:=chuzhan;
if ((c='(')and(s[zz]=')'))or((c='[')and(s[zz]=']'))
then zz:=zz else exit(false);
end;
inc(zz);
until (zhankong)or(zz=length(s)+1);
if not( zhankong) then if not(zz=length(s)+1) then exit(false);
exit(true);
end;
begin
readln(s);
n_b:=0;
n_e:=0;
m_b:=0;
m_e:=0;
for i:=1 to length(s) do
case s[i] of
'(':inc(n_b);
')':inc(n_e);
'[':inc(m_b);
']':inc(m_e);
end;
if (n_b<>n_e)or(m_b<>m_e) then begin writeln(wrong);halt; end;
top:=0;zz:=1;
writeln(ans[jishuan]);
end.
参考资料: 我只会编pascal 我想你能看懂它
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询