25.07.2017 Views

Intro-CSharp-Book-v2015

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Глава 16. Линейни структури от данни 673<br />

4. George<br />

3. Maria<br />

2. Nikolay<br />

1. Ivan<br />

Проверка за съответстващи скоби – пример<br />

Да разгледаме следната задача: имаме числов израз, на който искаме да<br />

проверим дали броят на отварящите скоби е равен на броя на затварящите.<br />

Спецификата на стека ни позволява да проверяваме дали скобата, която<br />

сме срещнали има съответстваща затваряща. Когато срещнем отваряща, я<br />

добавяме към стека. При срещане на затваряща вадим елемент от стека.<br />

Ако стекът остане празен преди края на програмата в момент, в<br />

който трябва да извадим още един елемент, значи скобите са<br />

некоректно поставени. Същото важи и ако накрая в стека останат<br />

някакви елементи. Ето една примерна реализация:<br />

public static void Main()<br />

{<br />

string expression =<br />

"1 + (3 + 2 - (2+3) * 4 - ((3+1)*(4-2)))";<br />

Stack stack = new Stack();<br />

bool correctBrackets = true;<br />

}<br />

for (int index = 0; index < expression.Length; index++)<br />

{<br />

char ch = expression[index];<br />

if (ch == '(')<br />

{<br />

stack.Push(index);<br />

}<br />

else if (ch == ')')<br />

{<br />

if (stack.Count == 0)<br />

{<br />

correctBrackets = false;<br />

break;<br />

}<br />

stack.Pop();<br />

}<br />

}<br />

if (stack.Count != 0)<br />

{<br />

correctBrackets = false;<br />

}<br />

Console.WriteLine("Are the brackets correct? " + correctBrackets);<br />

Ето как изглежда изходът от примерната програма:

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!