Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #define DataType struct DataType
- #define Stack struct Stack
- #define Storage struct Storage
- #define StorageType enum StorageType
- StorageType { VECTOR, LIST };
- Storage {
- Vector* vector;
- List* list;
- };
- void initVector(Vector* vector, size_t size);
- void initList(List* list);
- void initStorage(Storage* storage, StorageType storageType, size_t size) {
- vector = list = NULL;
- if(storageType == VECTOR)
- initVector(storage->vector, size);
- else if(storageType == LIST)
- initList(storage->list);
- }
- int isImplementedUsingVector(Storage* storage) { return storage->vector != NULL; }
- int isImplementedUsingList(Storage* storage) { return storage->list != NULL; }
- void addElement(Storage* storage, DataType* element) {
- if(isImplementedUsingList(storage))
- pushBackList(storage->list, element);
- else if(isImplementedUsingVector(storage))
- pushBackVector(storage->vector, element);
- }
- void removeElement(Storage* storage) {
- if(isImplementedUsingList(storage))
- popBackList(storage->list);
- else if(isImplementedUsingVector(storage))
- popBackVector(storage->vector);
- }
- Stack {
- Storage* storage;
- size_t currentNumberOfElements;
- size_t maxNumberOfElements;
- };
- void initStack(Stack* stack, StorageType storageType, size_t size) {
- stack = malloc(sizeof(Stack));
- stack->maxNumberOfElements = size;
- stack->currentNumberOfElements = 0;
- initStorage(stack->storage, storageType, size);
- }
- void push(Stack* stack, DataType* element) {
- addElement(stack->storage, element);
- stack->currentNumberOfElements++;
- }
- void pop(Stack* stack) {
- removeElement(stack->storage);
- stack->currentNumberOfElements--;
- }
- int main(void) {
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement