TElem Decide TElem PSt1 TElem St2 TElem St1 PSt1 Dop NULL DopDop NULL

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
TElem* Decide (TElem **PSt1, TElem *St2){
TElem *St1= *PSt1, *Dop=NULL, *DopDop=NULL;
St2 = FreeStack(St2);
int k=0, g=NULL;
while (St1){
if (strcmp(St1->Info.Symbol,"0")==0 || atoi(St1->Info.Symbol)!=NULL){
if (!k) {
TopToTop(&St1, &DopDop);;
k++;
g=atoi(St1->Info.Symbol);
}
if (atoi(St1->Info.Symbol)!=g){
if (k<2) {
St2=PushStack(St2, DopDop->Info);
PopStack(&DopDop);
k=0;
TopToTop(&St1, &Dop);
}
else{
k=0;
TopToTop(&St1, &Dop); }
}
else {k++; TopToTop(&St1, &Dop);}
}
else {TopToTop(&St1, &Dop);}
}
while(Dop) TopToTop(&Dop, &St1);
*PSt1 = St1; // новый адрес через параметр (изменение по адресу)
return St2;// новый адрес через результат функции вернется
}