//LinkQueue.h
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
typedef int Datatype;
typedef struct LinkQueueNode
{
Datatype data;
struct LinkQueueNode* next;
}LQN;
typedef struct LinkQueue
{
LQN* front;
LQN* rear;
}LQ;
void LinkqueueInit(LQ* pq);
void LinkqueueDestory(LQ* pq);
int LinkqueueEmpty(LQ* pq);
void LinkqueuePush(LQ* pq,Datatype x);
void LinkqueuePop(LQ* pq);
Datatype LinkqueueFront(LQ* pq);
Datatype LinkqueueBack(LQ* pq);
int LinkqueueLen(LQ* pq);
//LinkQueue.c
#include "LinkQueue.h"
void LinkqueueInit(LQ* pq)
{
assert(pq);
LQN* new = (LQN*)malloc(sizeof(LQN));//创建头节点
if (new == NULL)
{
printf("失败");
exit(-1);
}
new->next = NULL;
pq->front=pq->rear = new;
}
void LinkqueueDestory(LQ* pq)
{
assert(pq);
LQN* cur = pq->front->next;
while (cur)
{
LQN* next = cur->next;
free(cur);
cur = next;
}
}
int LinkqueueEmpty(LQ* pq)
{
assert(pq);
if (pq->front == pq->rear)
return 1;
else
return 0;
}
void LinkqueuePush(LQ* pq,Datatype x)
{
assert(pq);
LQN* new = (LQN*)malloc(sizeof(LQN));
if (new == NULL)
{
printf("失败");
exit(-1);
}
new->data = x;
new->next = NULL;
pq->rear->next = new;
pq->rear = new;
}
void LinkqueuePop(LQ* pq)
{
assert(pq);
if (pq->front == pq->rear)
{
printf("空队列");
exit(-1);
}
LQN*p = pq->front->next;
pq->front->next = p->next;
if (pq->rear == p)
pq->rear = pq->front;
free(p);
}
Datatype LinkqueueFront(LQ* pq)
{
assert(pq);
assert(pq->front);
return (pq->front->next)->data;
}
Datatype LinkqueueBack(LQ* pq)
{
assert(pq);
assert(pq->front);
return pq->rear->data;
}
int LinkqueueLen(LQ* pq)
{
assert(pq);
int len = 0;
LQN* cur = pq->front->next;
while (cur)
{
len++;
cur = cur->next;
}
}
数据结构链队列
最新推荐文章于 2024-08-18 17:46:51 发布