SHOW:
|
|
- or go back to the newest paste.
1 | #include <stdio.h> | |
2 | ||
3 | #define DataType struct DataType | |
4 | #define Stack struct Stack | |
5 | #define Storage struct Storage | |
6 | #define StorageType enum StorageType | |
7 | ||
8 | StorageType { VECTOR, LIST }; | |
9 | ||
10 | - | StorageStructure { |
10 | + | Storage { |
11 | Vector* vector; | |
12 | List* list; | |
13 | }; | |
14 | ||
15 | - | void initVector(Vecotr* vector, size_t size); |
15 | + | void initVector(Vector* vector, size_t size); |
16 | void initList(List* list); | |
17 | void initStorage(Storage* storage, StorageType storageType, size_t size) { | |
18 | vector = list = NULL; | |
19 | if(storageType == VECTOR) | |
20 | initVector(storage->vector, size); | |
21 | else if(storageType == LIST) | |
22 | initList(storage->list); | |
23 | } | |
24 | int isImplementedUsingVector(Storage* storage) { return storage->vector != NULL; } | |
25 | int isImplementedUsingList(Storage* storage) { return storage->list != NULL; } | |
26 | void addElement(Storage* storage, DataType* element) { | |
27 | if(isImplementedUsingList(storage)) | |
28 | pushBackList(storage->list, element); | |
29 | else if(isImplementedUsingVector(storage)) | |
30 | pushBackVector(storage->vector, element); | |
31 | } | |
32 | void removeElement(Storage* storage) { | |
33 | if(isImplementedUsingList(storage)) | |
34 | popBackList(storage->list); | |
35 | else if(isImplementedUsingVector(storage)) | |
36 | popBackVector(storage->vector); | |
37 | } | |
38 | ||
39 | ||
40 | Stack { | |
41 | Storage* storage; | |
42 | size_t currentNumberOfElements; | |
43 | size_t maxNumberOfElements; | |
44 | }; | |
45 | void initStack(Stack* stack, StorageType storageType, size_t size) { | |
46 | stack = malloc(sizeof(Stack)); | |
47 | stack->maxNumberOfElements = size; | |
48 | stack->currentNumberOfElements = 0; | |
49 | initStorage(stack->storage, storageType, size); | |
50 | } | |
51 | void push(Stack* stack, DataType* element) { | |
52 | addElement(stack->storage, element); | |
53 | stack->currentNumberOfElements++; | |
54 | } | |
55 | void pop(Stack* stack) { | |
56 | removeElement(stack->storage); | |
57 | stack->currentNumberOfElements--; | |
58 | } | |
59 | ||
60 | ||
61 | int main(void) { | |
62 | ||
63 | return 0; | |
64 | } |