-
Notifications
You must be signed in to change notification settings - Fork 0
/
seznamOp.c
79 lines (79 loc) · 1.83 KB
/
seznamOp.c
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include "mystring.h"
#include "ial.h"
#include "predik.h"
///////////////
void initListp (tListOp *L)
{
L->First = NULL;
L->Act = NULL;
L->Last = NULL;
}
/////////////////
////////////
void disposeListp (tListOp *L)
{
tListOpItem helpPtr, delPtr; // pomocne promenne; delPtr - pro ulozeni prvku urcenych k uvolneni
helpPtr = L->First;
while (helpPtr != NULL) { // pokud seznam neni prazdny
delPtr = helpPtr; // do delPtr se ulozi prvek
free(delPtr); // uvolnime prvek
helpPtr = helpPtr->rptr; // nasledne posuneme se na dalsi prvek doprava
}
L->First = NULL;
L->Act = NULL;
L->Last = NULL;
}
/////////////////
void pushOp(tListOp *L, int OperType)
{
tListOpItem newItem;
//printf("aloha");
if ((newItem = malloc(sizeof(tListOpItem))) != NULL) {
newItem->data = OperType;
newItem->lptr = NULL;
newItem->rptr = NULL;
if (L->Last == NULL) { // pokud je vkladany prvek prvni
L->First = newItem;
newItem->lptr = newItem; // nastavi prvni prvek na vkladany
}
else { // pokud neni prvnim vkladanym prvkem
L->Last->rptr = newItem;
newItem->lptr = L->Last; // zaradi vkladany prvek za posledni prvek seznamu
}
L->Last = newItem; // aktualizuje posledni prvek na nove vlozeny
}
else {
error(2); // tady upravit *****
}
}
int popOp(tListOp *L)
{
int pom;
tListOpItem helpPtr;
if(L->Last != NULL) { // pokud neni seznam prazdny ulozi hodnotu posledniho prvku do ukazatele val
pom = L->Last->data;
helpPtr = L->Last;
if (L->First == L->Last) {
L->First = NULL;
L->Act = NULL;
L->Last = NULL;
}
if (L->Last == L->Act) {
L->Act = NULL;
}
L->Last = helpPtr->lptr;
L->Last->rptr = NULL;
free(helpPtr);
}
else { // pokud je seznam prazdny error
error(2); // dopsat cislo erroru******
}
return pom;
}
bool isEmptyp (tListOp *L)
{
return(L->First==0);
}