Algoritmusok 3
- Eljárás: PUSH(STACK, TOP, MAXSTK, ITEM). Az eljárás ráhelyezi a veremre az
ITEM adatelemet.
- [A verem már tele van?]
If TOP=MAXSTK, then PRINT: TÚLCSORDULÁS,
Return.
- TOP:=TOP+1.
[A TOP értékének megnövelése 1-gyel.]
- STACK[TOP]:=ITEM. [Az ITEM ráhelyezése a veremre.]
- Return.
- Eljárás: POP(STACK, TOP, ITEM). Az eljárás leemeli a STACK verem legfelső
elemét, és hozzárendeli azt az ITEM változóhoz.
- [Nem üres a verem?]
If TOP=0, then Print: ALULCSORDULÁS.
Return.
- ITEM:=STACK[TOP].
[A verem legfelső elemének hozzárendelése az ITEM változóhoz.]
- TOP:=TOP-1.
[A TOP értékének csökkentése 1-gyel.]
- Return.
- Eljárás: QUICK(A, N, BEG, END, LOC). Az A tömb N elemű. A BEG és az END az
A tömb részlistájának határoló értékeit tartalmazza, Az eljárásban a LOC követi
nyomon a részlista első elemének - A[BEG] - pozícióját. A LEFT és a RIGHT lokális
változó tartalmazza majd a még felderítetlen elemek listájának határoló értékeit.
- [Inicializálás.] LEFT:=BEG, RIGHT:=END, LOC:=BEG.
- [Felderítés jobbról balra.]
- Repeat while A[LOC]<=A[RIGHT] and LOC . RIGHT:
RIGHT:=RIGHT-1.
[A ciklus vége.]
- If LOC=RIGHT, then: Return.
- If A[LOC]>A[RIGHT], then:
- [Az A[LOC] és az A[RIGHT] felcserélése.]
TEMP:=A[LOC], A[LOC]:=A[RIGHT],
A[RIGHT]:=TEMP.
- LOC:=RIGHT.
- Goto 3. lépés.
[Az If szerkezet vége.]
- [Felderítés balról jobbra.]
- Repeat while A[LEFT]<=A[LOC] and LEFT . LOC:
LEFT:=LEFT+1.
[A ciklus vége.]
- If LOC=LEFT, then Return.
- If A[LEFT]>A[LOC], then:
- [Az A[LEFT] és az A[LOC] felcserélése.]
TEMP:=A[LOC], A[LOC]:=A[LEFT],
A[LEFT]:=TEMP.
- LOC:=LEFT.
- Goto 2. lépés.
[Az If szerkezet vége.]
- Algoritmus: gyorsrendezés. Az N elemet tartalmazó A tömb rendezése.
- [Inicializálás.] TOP:=NULL.
- [Az A határoló értékeinek vermekre helyezése, ha az A két vagy több elemet
tartalmaz.]
If N>1, then: TOP:=TOP+1, LOWER[1]:=1, UPPER[1]:=N.
- Repeat 4-7. lépés while TOP . NULL.
- [A részlista leemelése a vermekről.]
BEG:=LOWER[TOP], END:=UPPER[TOP],
TOP:=TOP-1.
- Call QUICK(A, N, BEG, END, LOC). [III: Eljárás.]
- [A bal oldali részlista vermekre helyezése, ha a lista két vagy több elemet
tartalmaz.]
If BEGTOP:=TOP+1, LOWER[TOP]:=BEG,
UPPER[TOP]:=LOC-1.
[Az If szerkezet vége.]
- [A jobb oldali részlista vermekre helyezése, ha a lista két vagy több elemet
tartalmaz.]
IF LOC+1TOP:=TOP+1, LOWER[TOP]:=LOC+1,
UPPER[TOP]:=END.
[Az IF szerkezet vége.]
[A 3. lépésben elkezdődött ciklus vége.]
- Exit.
- Eljárás: TOWER(N, BEG, AUX, END). A Hanoi tornyai feladat rekurzív megoldása
N darab korong esetére.
- If N=1, then:
- Write: BEG › END.
- Return.
[Az If szerkezet vége.]
- [N-1 darab korong áthelyezése a BEG rúdról az AUX rúdra.]
Call TOWER (N-1, BEG, END, AUX).
- Write: BEG › END.
- [N-1 darab korong áthelyezése a AUX rúdról az END rúdra.]
Call TOWER (N-1, BEG, END, AUX).
- Return
- Eljárás: TOWER(N, BEG, AUX, END). Az eljárás - a rekurzív megoldás
átdolgozásával - megadja a Hanoi tornyai feladat megoldását N darab korong esetére.
Az STN, az STBEG, az STAUX, az STEND és az STADD verem az N, a BEG, az
AUX, az END és az ADD változóra vonatkozik.
- TOP:=NULL.
- If N=1, then:
- Write: BEG › END.
- Go to 5. lépés.
[Az If szerkezet vége.]
- [A "Call TOWER(N-1, BEG, END, AUX)" hívás átalakítása.]
- [Az aktuális értékek és az új visszatérési cím ráhelyezése a vermekre.]
- TOP:=TOP+1
- STN[TOP]:=N, STBEG[TOP]:=BEG,
STAUX[TOP]:=AUX, STEND[TOP]:=END,
STADD[TOP]:=3.
- [A paraméterek értékének beállítása.]
N:=N-1, BEG:=BEG, AUX:=END, END:=AUX.
- Go to 1. lépés.
- Write: BEG › END.
- [A "Call TOWER(N-1, AUX, BEG, END)" hívás átalakítása.]
- [Az aktuális értékek és az új visszatérési cím ráhelyezése a vermekre.]
- TOP:=TOP+1
- STN[TOP]:=N, STBEG[TOP]:=BEG,
STAUX[TOP]:=AUX, STEND[TOP]:=END,
STADD[TOP]:=5.
- [A paraméterek értékének beállítása.]
N:=N-1, BEG:=AUX, AUX:=BEG, END:=END.
- Go to 1. lépés.
- [A "Return" végrehajtása.]
- If TOP=NULL, then: Return.
- [A legfelső értékek leemelése a vermekről.]
- N:=STN[TOP], BEG:=STBEG[TOP],
AUX:=STAUX[TOP], END:=STEND[TOP],
ADD[TOP]:=STADD[TOP].
- TOP:=TOP-1.
- Go to ADD. Lépés
- Eljárás: QUINSERT(QUEUE, N, FRONT, REAR, ITEM). Az ITEM adattétel
beszúrása a sorba.
- [A sor már tele van?]
If FRONT=1 and REAR=N, or if FRONT=REAR+1, then:
Write: TÚLCSORDULÁS.
Return.
- [A REAR új értékének megkeresése.]
If FRONT=NULL, then: [A sor a kiinduláskor már üres.]
FRONT:=1, REAR:=1.
Else if REAR=N, then:
REAR:=1.
Else:
REAR:=REAR+1.
[Az If szerkezet vége.]
- QUEUE[REAR]:=ITEM. [Az új elem beszúrása.]
- Return.
- Eljárás: QDELETE(QUEUE, N, FRONT, REAR, ITEM). Az eljárás törli a sorból az
ITEM adattételt, és hozzárendeli azt az ITEM változóhoz.
- [A sor már üres?]
If FRONT=NULL, then: Write: ALULCSORDULÁS.
Return.
- ITEM:=QUEUE(FRONT).
- [A FRONT új értékének megkeresése.]
If FRONT=REAR, then: [A sorban csupán egyetlen elem szerepel.]
FRONT:=NULL, REAR:=NULL.
Else if FRONT=N, then:
FRONT:=1.
Else:
FRONT:=FRONT+1.
[Az If szerkezet vége.]
- Return.
Egy szintet vissza, vagy
vissza a főmenübe.