Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // GenericList.cpp: Define o ponto de entrada para a aplicação de console.
- //
- #include "stdafx.h"
- typedef struct Item {
- Item *ref;
- void *val;
- } Item;
- // Stack
- typedef struct Stack {
- Item *last;
- int len;
- } Stack;
- Stack* newStack() {
- Stack *ptr = (Stack*)malloc(sizeof(Stack));
- ptr->last = NULL;
- ptr->len = 0;
- return ptr;
- }
- //Push pointer to stack
- void stackPush(Stack *stack, void *item) {
- Item *ptr = (Item*)malloc(sizeof(Item));
- ptr->ref = stack->last;
- ptr->val = item;
- stack->last = ptr;
- stack->len++;
- }
- //Push pointer VALUE to stack
- void stackPush(Stack *stack, void *item, int typeLen) {
- void *val = malloc(typeLen);
- memcpy(val, item, typeLen); //Why is it on string.h?
- stackPush(stack, val);
- }
- void* stackPop(Stack *stack) {
- if(stack->len == 0)
- return NULL;
- Item *item = stack->last;
- stack->last = item->ref;
- stack->len--;
- void *ptr = item->val;
- free(item);
- return ptr;
- }
- // Queue
- typedef struct Queue {
- Item *first;
- Item *last;
- int len;
- } Queue;
- Queue* newQueue() {
- Queue *ptr = (Queue*)malloc(sizeof(Queue));
- ptr->first = NULL;
- ptr->last = NULL;
- ptr->len = 0;
- return ptr;
- }
- void enqueue(Queue *queue, void *item) {
- Item *ptr = (Item*)malloc(sizeof(Item));
- ptr->val = item;
- ptr->ref = NULL;
- if(queue->len == 0)
- queue->first = ptr;
- else
- queue->last->ref = ptr;
- queue->last = ptr;
- queue->len++;
- }
- void enqueue(Queue *queue, void *item, int typeLen) {
- void *val = malloc(typeLen);
- memcpy(val, item, typeLen);
- enqueue(queue, val);
- }
- void* dequeue(Queue *queue) {
- if(queue->len == 0)
- return NULL;
- Item *item = queue->first;
- queue->first = item->ref;
- queue->len--;
- void *ptr = item->val;
- free(item);
- return ptr;
- }
- int main() {
- int x;
- Stack *stack = newStack();
- x = 10;
- stackPush(stack, &x, sizeof(int));
- x = 12;
- stackPush(stack, &x, sizeof(int));
- x = 14;
- stackPush(stack, &x, sizeof(int));
- x = 16;
- stackPush(stack, &x, sizeof(int));
- printf("Stack test: %d %d %d %d\n", *(int*)stackPop(stack), *(int*)stackPop(stack), *(int*)stackPop(stack), *(int*)stackPop(stack));
- Queue *queue = newQueue();
- x = 99;
- enqueue(queue, &x, sizeof(int));
- x = 88;
- enqueue(queue, &x, sizeof(int));
- x = 77;
- enqueue(queue, &x, sizeof(int));
- x = 66;
- enqueue(queue, &x, sizeof(int));
- printf("Queue test: %d %d %d %d\n", *(int*)dequeue(queue), *(int*)dequeue(queue), *(int*)dequeue(queue), *(int*)dequeue(queue));
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement