队列的C语言实现

队列不同于栈,它是先进先出,即先入队列的元素提取时也要先出队列。队列可以用数组实现也可以用链表实现,挺简单的,但是很有些情况下很有用。它的实现只要维持好队首和队尾指针就好了。下面是我实现的链表队列。

queue.h

#ifndef __QUEUE_H
#define __QUEUE_H

#include <stdio.h>
#include <stdlib.h>

struct QueueNode;
struct queue;

typedef Vertex ElementType;
typedef struct QueueNode *Node;
typedef struct queue *Queue;

struct QueueNode
{
	ElementType element;
	Node next;
};

struct queue
{
	Node first;
	Node last;
};

Queue createQueue();
int isEmpty(Queue Q);
void EnQueue(ElementType X,Queue Q);
ElementType DeQueue(Queue Q);
void deleteQueue(Queue Q);


#endif

queue.c

#include "queue.h"

Queue createQueue()
{
	Queue Q;
	Node node;
	node=(Node)malloc(sizeof(struct QueueNode));
	if(node==NULL)
	{
		printf("out of space\n");
		exit(-1);
	}
	node->next=NULL;
	
	Q=(Queue)malloc(sizeof(struct queue));
	if(Q==NULL)
	{
		printf("out of space\n");
		exit(-1);
	}
	
	Q->first=node;
	Q->last=node;

	return Q;
}

int isEmpty(Queue Q)
{
	if(Q->first==Q->last)
		return 1;
	else
		return 0;
}

void EnQueue(ElementType X,Queue Q)
{
	Node node;
	node=(Node)malloc(sizeof(struct QueueNode));
	if(node==NULL)
	{
		printf("out of space\n");
		exit(-1);
	}
	node->element=X;
	node->next=NULL;
	Q->last->next=node;
	Q->last=node;
}

ElementType DeQueue(Queue Q)
{
	ElementType x;
	Node p;
	if(isEmpty(Q))
	{
		printf("queue is empty\n");
		exit(-1);
	}
	p=Q->first->next;
	Q->first->next=p->next;
	x=p->element;
	if(p==Q->last)
	{
		Q->last=Q->first;
	}
	free(p);
	return x;
}

void deleteQueue(Queue Q)
{
	while(!isEmpty(Q))
	{
		DeQueue(Q);
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值