现在的位置: 首页 > 综合 > 正文

数据结构 队列源代码

2013年08月18日 ⁄ 综合 ⁄ 共 1648字 ⁄ 字号 评论关闭
#include <stdio.h>
#include <iostream>
using namespace std;

typedef int SElemType;

struct Node
{
	SElemType data;
	struct Node* next;
};

typedef struct {
	Node* front;
	Node* rear;
}LinkQueue;

//初始化队列
bool InitQueue(LinkQueue* &queue)
{
	queue = new LinkQueue();
	if(!queue)
	{
		return false;
	}
	queue->front = NULL;
	queue->rear  = NULL;
	return true;
}

//入队列
void EnQueue(LinkQueue* &queue,SElemType e)
{
	Node* node = new Node();
	node->data = e;
	node->next = NULL;
	//如果队列为空
	if(queue->rear == NULL)
	{
		queue->front = node;
		queue->rear  = node;
	}
	else//如果队列不为空
	{
		queue->rear->next = node;
		queue->rear = node;
	}	
}

//出队列
SElemType DeQueue(LinkQueue* &queue)
{
	if(queue->front == NULL)
	{
		return -1;
	}
	else
	{
		SElemType elem;
		Node* node = queue->front;
		elem = node->data;
		if(queue->front->next == NULL)
		{
			queue->front = NULL;
			queue->rear  = NULL;
		}
		else
		{
			queue->front = queue->front->next;
		}
		delete node;
		return elem;
	}
}

//获得队列头元素
SElemType GetHead(LinkQueue* &queue)
{
	if(queue->front!=NULL)
	{
		return queue->front->data;
	}
	else
		return -1;
}

//判断队列空
bool empty(LinkQueue* &queue)
{
	if(queue->front == NULL)
		return true;
	else
		return false;
}

//求队列长度
int QueueLength(LinkQueue* &queue)
{
	int i = 0;
	Node* p = queue->front;
	while(p!=NULL)
	{
		i++;
		p = p->next;
	}
	return i;
}

//清空队列
void ClearQueue(LinkQueue* &queue)
{
	if(queue->front == NULL)
	{
		return;
	}
	else
	{
		Node* p = queue->front;
		Node* q = p->next;
		while(q)
		{
			delete p;
			p = NULL;
			p = q;
			q = q->next;
		}
		delete p;
		p = NULL;
		queue->front = NULL;
		queue->rear  = NULL;
	}
}

//销毁队列
void DestroyQueue(LinkQueue* &queue)
{
	ClearQueue(queue);
	delete queue;
	queue = NULL;
}

//显示队列
void PrintQueue(LinkQueue* &queue)
{
	Node* p = queue->front;
	while(p)
	{
		cout<<p->data<< " ";
		p = p->next;
	}
	cout << endl;
}

void main()
{
	LinkQueue* queue;
	InitQueue(queue);
	EnQueue(queue,3);
	EnQueue(queue,4);
	EnQueue(queue,5);
	PrintQueue(queue);
	cout<< GetHead(queue) << endl;
	cout<< DeQueue(queue) << endl;
	DestroyQueue(queue);
}

 

【上篇】
【下篇】

抱歉!评论已关闭.