队列
队列的顺序实现
typedef int Position
struct QNode
{
ElementType *Data;
Position front,rear;
int MaxSize;
};
typedef struct QNode *Queue;
Queue CreateQueue(int MaxSize)//初始化一个队列
{
Queue q = (Queue)malloc(sizeof(struct QNode));//分配队列结构空间
q->Data = (ElementType*)malloc(sizeof(ElementType * MaxSize));//分配数据存储空间
q->fonnt = q->rear = -1;//头尾置空
q->MaxSize = MaxSize;
}
bool isFull(Queue q)//判断是否满,环序队列
{
return ((q->rear + 1) % MaxSize == q->front);//头部不存储数据,避免空与满冲突
}
bool isEmpty(Queue q)//判断是否为空
{
return (q->rear == q->front);
}
bool addQueue(Queue q,ElementType x)//入队操作
{
if(isFull(q))
{
return false;
}
else
{
q->rear = (q->rear + 1) % q->MaxSize;
q->Data[q->rear] = x;
return true;
}
}
ElementType deleteQueue(Queue q)//出队操作
{
if(isEmpty(q))
{
return false;
}
else
{
q->front = (q->Front + 1) % q->MaxSize;
return q->Data[q->front];
}
}
队列的链表实现
typedef Node *PtrToNode;//定义数据节点指针
struct Node//定义数据存储节点
{
ElementType Data;
PtrToNode Next;
}
struct QNode//定义指针结构
{
PtrToNode front;//定义头尾
PtrToNode rear;
};
typedef struct QNode *Queue;//定义队列指针
Queue createQueue()//创建队列
{
Queue q = (Queue)malloc(sizeof(struct QNode));//分配队列指针域
q->front = NULL;
q->rear = NULL;
return q;
}
//bool isFull(Queue q)//对于链表实现的队列,只要有内存可用,就不会满
//{ }
bool isEmpty(Queue q)
{
return (q->front == NULL);
}
bool addQueue(Queue q,ElementType x)
{
PtrToNode p = (PtrToNode)malloc(sizeof(struct Node));//分配数据节点空间
p->Data = x;
p->Data = NULL;
if(isEmpty(q))//判断是否为空
{
p->rear = p;//都指向第一个数据节点
p->front = p;
}
else
{
p->rear->Next = p;//数据从尾部插入
p->rear = p;
}
return true;
}
ElementType deleteQueue(Queue)
{
if(isEmpty(q))//判断是否为空
{
return ERROR;
}
else
{
ElementType first;
PtrToNode temp;
temp = q->front;
first = q->front->Data;
if(q->front == q->rear)//判断是否只有一个节点
{
q->front = q->rear = NULL;//出队后置空
}
else
{
q->front = q->front->Next;//指向下一个数据节点
free(temp);//释放空间
}
return first;
}
}