資料結構棧求解

2023-02-02 10:00:28 字數 1494 閱讀 4492

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 ...