1、栈是先进后出(FILO),队列是先进先出(FIFO)。
2、栈和队列都是链表的一种,只是插入和删除节点的操作位置不同。栈:插入和删除节点方向相同。队列:插入和删除节点方向相反。
typedef List Stack;
int stack_push(Stack*stack, const void *data)
{
return list_ins_next(stack, NULL, data);
}
int stack_pop(Stack*stack, void **data)
{
return list_rem_next(stack, NULL, data);
}
typedef List Queue;
int queue_enqueue(Queue *queue, const void *data)
{
return list_ins_next(queue, list_tail(queue), data);
}
int queue_dequeue(Queue *queue, void **data)
{
return list_rem_next(queue, NULL, data);
}
3、队列示例:事件处理。一个事件来临则给它分配空间并加入队列。处理一个事件则出队列,并调度事件。
int receive_event(Queue *queue, QueueElmt *element)
{
QueueElmt new_element;
if(new_element = (QueueElmt *)malloc(sizeof(QueueElmt)) == NULL)
return -1;
memcpy(new_element, element, sizeof(element));
if(enquque(queue, new_element) != 0)
return -1;
return 0;
}
int process_event(Queue *queue, int (*dispach)(QueueElmt *element))
{
QueueElmt element;
if(dequeue(queue, (void **)&element) != 0)
return -1;
else
{
dispach(element);
free(element);
}
return 0;
}