jazykc
2013.3
upoljazykc
Main Page
Related Pages
Classes
Files
File List
File Members
All
Classes
Files
Functions
Variables
Typedefs
Macros
Pages
dynamicka-prace-s-pameti
dynamicky-zasobnik.c
Go to the documentation of this file.
1
42
#include <stdio.h>
43
#include <stdlib.h>
44
#include <assert.h>
45
46
struct
prvek
{
47
int
data;
48
struct
prvek
*next;
49
};
50
typedef
struct
prvek
prvek
;
51
56
prvek
*
pridej
(
prvek
*zasobnik,
int
data) {
57
prvek
*novy = malloc(
sizeof
*novy);
//netreba typecast, void* v Cecku je OK!!!
58
novy->data = data;
59
novy->next = zasobnik;
60
return
novy;
61
}
62
63
int
vrchol (
prvek
*zasobnik) {
64
assert(zasobnik);
//zasobnik nesmi byt prazdny
65
return
zasobnik->data;
//na toto by stacilo i makro?
66
};
67
68
prvek
* odeber (
prvek
*zasobnik) {
69
prvek
*next;
70
if
(!zasobnik)
return
NULL;
//prazdny zasobnik
71
next = zasobnik->next;
72
free(zasobnik);
73
return
next;
//novy vrsek zasobniku
74
}
75
76
#define is_empty(z) (!(z))
77
78
//todo: cbk by mel mit nejaky ctx/userdata pointer
79
int
for_each(
prvek
*zasobnik,
int
(*cbk)(
int
i,
int
data)) {
80
prvek
*next = zasobnik;
81
int
i = 0;
82
int
data;
83
for
(i=0; next; next=next->next, i++) {
84
if
(cbk(i, next->data))
break
;
85
}
86
return
i;
87
}
88
89
static
int
cbk_vypis (
int
i,
int
data) {
90
printf(
"%d.ty prvek .data=%d\n"
,i,data);
91
return
0;
92
}
93
94
#define dup(z) (z)=pridej((z),vrchol((z)))
95
96
97
int
main(
void
) {
98
prvek
* z=NULL;
//prazdny zasobnik
99
int
i;
100
101
for
(i=1; i<=10; i++)
102
z =
pridej
(z, i);
103
for_each(z, cbk_vypis);
//nic, prazdny
104
105
while
(z!=NULL){
106
printf(
"%i\n"
, vrchol(z));
107
z=odeber(z);
108
}
109
for_each(z, cbk_vypis);
//nic, prazdny
110
z =
pridej
(z, 11);
111
z =
pridej
(z, 12);
112
z =
pridej
(z, 13);
113
dup(z);
114
for_each(z, cbk_vypis);
115
116
return
EXIT_SUCCESS;
117
}
prvek
Definition:
dynamicky-zasobnik.c:46
pridej
prvek * pridej(prvek *zasobnik, int data)
Definition:
dynamicky-zasobnik.c:56
Generated on Sat Dec 7 2013 22:57:26 for jazykc by
1.8.5