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

浙公网安备 33010602011771号