学习编程的秘诀就是多实践,写个队列代码。
queue.h:
#ifndef H_QUEUE
#define H_QUEUE
typedef struct _node{
char *data;
struct _node *prev;
struct _node *next;
} node;
typedef struct _queue{
node *front;
node *end;
} queue;
int push(char *, queue *);
char *pop(queue *);
#endif
queue.c:
#include "queue.h"
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
queue q;
q.front = NULL;
q.end = NULL;
while (--argc > 0)
push(*(++argv), &q);
while (q.front != NULL)
printf("%s\n", pop(&q));
}
int push(char *data, queue *q)
{
// Construct a new node
node *nnode = (node *)malloc(sizeof(node));
nnode->data = data;
nnode->prev = NULL;
nnode->next = NULL;
// If the queue is not empty
if (q->end != NULL)
{
// Set the new node to be the last one;
q->end->next = nnode;
nnode->prev = q->end;
}
else
{
q->front = nnode;
}
q->end = nnode;
return 0;
}
char *pop(queue *q)
{
// If the queue is null, return
if (q->front == NULL)
return "";
char *temp;
if (q->front->next != NULL)
{
// Make the second one to be first one
q->front->next->prev = NULL;
temp = q->front->data;
free(q->front);
q->front = q->front->next;
}
else
{
temp = q->front->data;
free(q->front);
q->front = NULL;
q->end = NULL;
}
return temp;
}