Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Stack +++

.pdf
Скачиваний:
27
Добавлен:
03.06.2015
Размер:
2.57 Mб
Скачать

21

Infix To Post 3

// pop all while(top>0)

{post[j]=q[top-1]; j++; top--; } post[j]=0;

i=strlen(post); return i;

} // InfixToPost

22

Priority

int Priority(char c)

{switch (c )

{case ‘(‘: return 0x7FFFFFFF; case ‘)‘: return 0;

case ‘+‘: return 1; case ‘-‘: return 1; case ‘*‘: return 2; case ‘/‘: return 2; case ‘^‘: return 4;

default: return -1;

}// switch

//return -1;

}// Priority

23

Infix To Post - пример

Infix:

(a + b) / (c*d –f)^k

Post:

ab + cd * f – k ^ /

infix

(

+

)

/

(

*

-

)

^

 

pr

inf

1

0

2

inf

2

1

0

3

free

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

* 2

- 1

 

 

 

 

 

+ 1

+ 1

 

( 0

( 0

( 0

 

^ 3

 

 

 

 

 

 

 

 

 

 

 

( 0

( 0

( 0

/ 2 / 2

/ 2

/ 2

/ 2 / 2

 

 

 

 

 

 

 

 

 

 

 

 

24

Вычисление постфиксного выражения

Алгоритм:

1)взять очередной элемент;

2)если это операнд - не знак операции, добавить его в стек;

3)если это знак операции, то

•взять из стека два операнда;

•выполнить операцию и записать результат в стек; 4) перейти к шагу 1.

25

Вычисление постфиксного выражения

Post:

ab + cd * f – k ^ /

+

 

 

*

 

-

 

^

/

 

 

 

 

 

 

 

 

 

 

 

d

 

f

 

k

 

 

 

 

 

 

 

 

 

 

 

b

c

c

c*d

c*d

c*d-f

c*d-f

(c*d-f)^k

 

 

 

 

 

 

 

 

 

 

a a a+b

a+b

a+b

a+b

a+b

a+b

a+b

a+b

 

 

 

 

 

 

 

 

 

 

26

Очередь

6

5

4

3

2

1

Очередь – это линейная структура данных, в которой добавление элементов возможно только с одного конца

-конца очереди,

аудаление элементов – только с другого конца

- начала очереди).

FIFO = First In – First Out

Кто первым вошёл, тот первым вышел

Операции с очередью:

1)добавить элемент в конец очереди (Push, Put);

2)удалить элемент с начала очереди (Pop, Get ).

27

Реализация: очередь - массив

1

1 2

1

2

3

 

 

 

 

 

 

 

 

 

 

 

1 2 3

1)при выборке из очереди можно не сдвигать все элементы

2)при выборке из очереди можно сдвигать все элементы

Реализация очереди - кольцевой массив 28

head tail free

1 2

head tail free

 

2

 

3

 

 

 

 

 

 

 

 

 

 

 

free

head

tail

 

 

 

 

 

 

3 4

tail free head

5

3

4

29

Очередь - кольцевой массив

Очередь пуста: head=n free=0

В очереди 2 элемента: head = free + 2

Очередь полна: head = free

30

Очередь - кольцевой (circular) массив

Структура данных: const int queuesize = 100;

struct QUEUE

{ int data[queuesize]; int head, free;

};

Добавление в очередь:

int Push(QUEUE &q, int n, int x )

{ if( q.free - q.head ==0) return -1; // queue full q.data [q.free] = x;

q.free++;

if(q.free == n) q.free=0; return q.free - q.head;

} //

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]