*
队列
*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
struct node {
int value;
struct node *next;
};
struct queue {
int count;
struct node *head;
struct node *tail;
};
void add_queue(struct queue *queue, struct node *node)
{
if (queue->count == 0)
{
queue->head = node;
queue->tail = node;
}
else
{
queue->tail->next = node;
queue->tail = node;
}
node->next = NULL;
queue->count++;
printf("add queue->value: %d, queue->count: %d\n", \
queue->tail->value, queue->count);
}
void del_queue(struct queue *queue, struct node **node)
{
struct node *elm;
*node = NULL;
if (queue->count == 0)
return;
elm = queue->head;
// if (elm != NULL)
{
queue->count--;
if (queue->count == 0)
{
queue->head = queue->tail = NULL;
}
else
{
queue->head = queue->head->next;
}
*node = elm;
(*node)->next = NULL;
}
printf("del queue->head->value: %d, queue->count: %d\n", \
(*node)->value, queue->count);
}
static struct queue queue;
int main(int argc, char **argv)
{
int i;
struct node *node;
memset(&queue, 0, sizeof(struct queue));
printf("add queue value\n");
for (i = 0; i < 10; i++)
{
node = (struct node *)malloc(sizeof(struct node));
printf("point: %p\n", node);
node->value = i;
add_queue(&queue, node);
}
printf("del queue value\n");
for (i = 0; i < 10; i++)
{
del_queue(&queue, &node);
printf("point: %p\n", node);
free(node);
}
return 0;
}