队列代码C实例

学习编程的秘诀就是多实践,写个队列代码。

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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值