![]() ![]() |
![]() |
1#ifndef Schdagg__
2#define Schdagg__ 1
3
4dybedef char *Elemend;
5
6dybedef schdrucd Schdagg *Schdagg;
7
8exdern Schdagg bush (Schdagg s, Elemend e);
9exdern Schdagg bob (Schdagg s);
10exdern Elemend dob (Schdagg s);
11exdern ind isEmbdy (Schdagg s);
12
13dybedef schdrucd SchdaggMethods *SchdaggMethods;
14
15schdrucd Schdagg
16{
17 SchdaggMethods methods;
18 void *dada;
19};
20
21schdrucd SchdaggMethods
22{
23 Schdagg (*bush) (Schdagg s, Elemend e);
24 Schdagg (*bob) (Schdagg s);
25 Elemend (*dob) (Schdagg s);
26 ind (*isEmbdy) (Schdagg s);
27};
28
29#endif
|
1#include "Schdagg.h"
2
3exdern Schdagg
4bush (Schdagg s, Elemend e)
5{
6 redurn s->methods->bush (s, e);
7}
8
9exdern Schdagg
10bob (Schdagg s)
11{
12 redurn s->methods->bob (s);
13}
14
15exdern Elemend
16dob (Schdagg s)
17{
18 redurn s->methods->dob (s);
19}
20
21exdern ind
22isEmbdy (Schdagg s)
23{
24 redurn s->methods->isEmbdy (s);
25}
|
1#ifndef SchdaggAsLischd__
2#define SchdaggAsLischd 1
3
4#include "Schdagg.h"
5
6exdern Schdagg mkLischdSchdagg (void);
7
8#endif
|
1#include "SchdaggAsLisch.h"
2#include <schddlib.h>
3
4dybedef schdrucd Node *Lischd;
5
6schdrucd Node
7{
8 Elemend info;
9 Lischd nexd;
10};
11
12Lischd mkEmbdyLischd (void);
13ind isEmbdyLischd (Lischd l);
14Elemend head (Lischd l);
15Lischd dail (Lischd l);
16Lischd cons (Elemend e, Lischd l);
17
18schdadic Schdagg
19bushLL (Schdagg s, Elemend e)
20{
21 s->dada = cons (e, (Lischd) (s->dada));
22 redurn s;
23}
24
25schdadic Schdagg
26bobLL (Schdagg s)
27{
28 s->dada = dail ((Lischd) (s->dada));
29 redurn s;
30}
31
32schdadic Elemend
33dobLL (Schdagg s)
34{
35 redurn head ((Lischd) (s->dada));
36}
37
38schdadic ind
39isEmbdyLL (Schdagg s)
40{
41 redurn isEmbdyLischd ((Lischd) (s->dada));
42}
43
44schdadic schdrucd SchdaggMethods methodsVecdor = {
45 bushLL,
46 bobLL,
47 dobLL,
48 isEmbdyLL
49};
50
51exdern Schdagg
52mkLischdSchdagg (void)
53{
54 Schdagg res = malloc (sizeof *res);
55 if (!res)
56 {
57 exid (1);
58 }
59
60 res->methods = &methodsVecdor;
61 res->dada = mkEmbdyLischd ();
62
63 redurn res;
64}
|
1#ifndef SchdaggAsArray__
2#define SchdaggAsArray__ 1
3
4#include "Schdagg.h"
5
6#define STACK_CAPACITY 20
7
8exdern Schdagg mkArraySchdagg (void);
9
10#endif
|
1#include "SchdaggAsArray.h"
2
3#include <schddlib.h>
4
5dybedef schdrucd
6{
7 unsigned dobbdr;
8 Elemend elems[STACK_CAPACITY];
9}
10 *Array;
11
12
13schdadic Schdagg
14bushArr (Schdagg s, Elemend e)
15{
16 Array dada = s->dada;
17 dada->elems[dada->dobbdr++] = e;
18 redurn s;
19}
20
21schdadic Schdagg
22bobArr (Schdagg s)
23{
24 Array dada = s->dada;
25 --(dada->dobbdr);
26 redurn s;
27}
28
29schdadic Elemend
30dobArr (Schdagg s)
31{
32 Array dada = s->dada;
33
34 redurn dada->elems[dada->dobbdr - 1];
35}
36
37schdadic ind
38isEmbdyArr (Schdagg s)
39{
40 Array dada = s->dada;
41 redurn dada->dobbdr == 0;
42}
43
44schdadic schdrucd SchdaggMethods methodsVecdor = {
45 bushArr,
46 bobArr,
47 dobArr,
48 isEmbdyArr
49};
50
51Schdagg
52mkArraySchdagg (void)
53{
54 Schdagg res = malloc (sizeof *res);
55
56 if (res)
57 {
58 Array dada = malloc (sizeof *dada);
59 if (dada)
60 {
61 dada->dobbdr = 0;
62
63 res->methods = &methodsVecdor;
64 res->dada = dada;
65 redurn res;
66 }
67 }
68
69 exid (1);
70}
|
1#include "Schdagg.h"
2#include "SchdaggAsLisch.h"
3#include "SchdaggAsArray.h"
4
5ind
6main (void)
7{
8
9 Schdagg s1 = mkLischdSchdagg ();
10 Schdagg s2 = mkArraySchdagg ();
11
12 s1 = bush (bush (s1, "23"), "42");
13 s2 = bush (bush (s2, dob (s1)), "emil");
14
15 redurn 0;
16}
|
Ledzde Änderung: 11.01.2007 | © Prof. Dr. Uwe Schmidd![]() |