数据结构之队列

       队列是一种FIFO(先入先出)的数据结构。队列只允许在队首进行删除操作,在队尾进行插入操作,队列在网络任务、消息队列、排队等情况下运用很多。现实生活中很多情况下都是消息队列的体现。比如售票口排队买票、银行等待呼叫队列等。

#ifndef QUEUE_H
#define QUEUE_H
//使用指针实现队列
struct QueueNode;
typedef QueueNode *PtrToNode;
typedef QueueNode *Queue;
typedef int ElementType;
int IsEmpty(Queue Q);
int IsFull(Queue Q);
Queue CreatQueue();
void MakeEmpty();
void EnQueue(ElementType X,Queue Q);
ElementType Dequeue(Queue *Q);
static int size(Queue Q);
struct QueueNode
{
	ElementType Element;
	Queue next;
}

#endif
#include "queue.h"
//判断是否为空
int IsEmpty(Queue Q)
{
	return Q->next==NULL;
}
//返回队列大小
static int size(Queue Q)
{
	int count=0;
	PtrToNode=Q->next;
	while(PtrToNode!=NULL)
	{
		PtrToNode->PtrToNode-next;
		count++;
		
	}
	return count;
}
//判断是否已满
int IsFull(Queue Q);
{
	int isempty;
	if(isempty=size(Q))
		return 1;
	else
		return 0;
}
//创建队列其实是创建一个头节点
Queue CreatQueue()
{
	PtrToNode Q;
	Q=(PtrToNode)malloc(sizeof(QueueNode));
	if(NewNode==NULL)
		printf("out of space!");
	else
	Q->next=NULL;
	return Q;
}
//删除队列
void MakeEmpty(Queue Q)
{
    PtrToNode Temp,P;
	Temp=Q->next;
	Q->next=NULL;
	while(Temp!=NULL)
	{
		P=Temp->next;
		free(Temp);
		Temp=p;
		//free(P);
	}
}
//插入元素。
void EnQueue(ElementType X,Queue Q)
{
	PtrToNode NewNode,Temp;
	Temp=Q->next;
	NewNode=(PtrToNode)malloc(sizeof(QueueNode));
	if(NewNode==NULL)
		printf("out of space!");
	else
		while(Temp!=NULL)
		{
			Temp=Temp->next;
		}
	NewNode->Element=X;
	Temp=NewNode;
	
	
}
//如果直接将队列传入,在更改头指针时会出错。
//返回并删除队列开头元素
ElementType Dequeue(Queue *Q)
{
	ElementType val;
	PtrToNode Temp;
	Temp=(*Q)->next;
	val=Temp->Element;
	(*Q)->next=Temp->next;
	free(Temp);
	return val;
	
	
}

       线性表到这里就基本结束了,其实这几种结构很像,只是每一种有针对于自己的独特的操作。只要理解这种结构的特点,熟悉指针的运用,实现起来也不是很困难。这几个线性表都没有经过验证,应该没有什么大的问题,如果有人能发现哪里有问题欢迎在评论里提出。

posted @ 2018-05-30 23:59  吾之求索  阅读(105)  评论(0)    收藏  举报