1樓:
1.建個堆疊,遇到( [ 就看現在棧頂裡放的跟遇到的是不是匹配。是,出棧,不是,報錯。
2.如果遇到) ] } 棧為空,報錯
3.所有輸入完成時棧不為空,報錯
const
ok='ok';
wrong='wrong';
ans:array[false..true]of string=(wrong,ok);
zuo=['[','('];you=[')',']'];
vars: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;
varc: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.
c語言資料結構中鏈棧的問題,C語言資料結構中鏈棧的問題
這個鏈棧應該bai就是一個du 用連結串列弄的後進先出的 zhi棧結構dao。top指標永遠指向棧的最上面的回那個節點。這個函式是新加一個節點到這個棧中,首先分配了空間給s,s是要新加入這個棧的那個節點。s next top 就是讓s指向棧的最上面的那個元素。top s 因為現在最上面的節點是s了,...
資料結構關於棧top指標位置問題
1 空棧的時候top base 1,就是棧外了。2 入棧的時候先top 然後將元素push入棧,所以 非空棧中的棧頂指標始終在棧頂元素的下一個位置 是正確的,但更應該理解為將要入棧位置的前一個位置 目前的棧頂元素位置 3 棧空判斷top 1,這樣的判斷沒見過。有也應該是 top base 1 或者t...
關於資料結構進棧和出棧的問題望賜教(就剩20分了,您別嫌少)
和 這種操作符!放在變數的前面為 如i 1 等式 i 2 4 是先計算這個值,再執行等式的!而 i 2 3 是先計算等式,之後再計算i的值,等式計算後i的值才是 2 進棧 s elem s top 程式內部會這樣分為兩步執行 s elem s top s top s top 1 出棧 s elem ...