View difference between Paste ID: SfkF82Rj and f02NsqDX
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
}