// main.h #ifndef MAIN_H #define MAIN_H struct queue{ void* data; struct queue* next; }; struct queue_cell{ struct queue *tail; struct queue *top; }; struct queue_cell* queue_new(void); void queue_free(struct queue_cell*); int queue_push(struct queue_cell*,void*); int queue_push_front(struct queue_cell*,void*); void queue_pop(struct queue_cell*); void* queue_top(struct queue_cell*); void* queue_tail(struct queue_cell*); int queue_empty(struct queue_cell*); #endif // main.c #include <stdio.h> #include <stdlib.h> #include <assert.h> #include <string.h> #include "main.h" struct queue_cell* queue_new(void) { struct queue_cell* queue = (struct queue_cell*)malloc(sizeof(struct queue_cell)); if(NULL == queue) { return NULL; } queue->top = queue->tail = NULL; return queue; } void queue_free(struct queue_cell* queue) { struct queue* p = queue->top; if(!queue) { return ; } while(p) { struct queue* next = p->next; free(p); p = next; } free(queue); } int queue_push(struct queue_cell* queue,void* data){ struct queue* cell = (struct queue*)malloc(sizeof(struct queue)); if(NULL == cell) { return 0; } cell->data = data; cell->next = NULL; if(queue->tail) { queue->tail->next=cell; queue->tail=cell; }else{ queue->top=queue->tail=cell; } return 0; } int queue_push_front(struct queue_cell* queue,void* data) { struct queue* cell= (struct queue*)malloc(sizeof(struct queue)); if(NULL == cell) { return 0; } cell->data=data; cell->next=queue->top; queue->top = cell; if(!queue->tail) { queue->tail=queue->top; } return 0; } // free void queue_pop(struct queue_cell* queue){ // struct queue* top = queue->top; queue->top = top->next; if(top == queue->tail) { queue->tail=NULL; } free(top); } // return values; void* queue_top(struct queue_cell* queue){ return queue->top->data; } void* queue_tail(struct queue_cell* queue){ return queue->tail->data; } int queue_empty(struct queue_cell* queue){ return queue->top==NULL; } int main() { struct queue_cell* queue= NULL; int a=1,b=2,c=3; queue = queue_new(); queue_push(queue,&a); queue_push_front(queue,&b); queue_push(queue,&c); printf("%p\r\n",&a); printf("%p\r\n",&b); printf("%p\r\n",&c); queue_free(queue); return 0; }