赞
踩
typedef char ElemType;
typedef struct Qnode //结点结构
{
ElemType data;
struct Qnode *next;
}Qnode;
typedef struct Qnode * QueuePtr; //指向结点结构的指针
typedef struct //队列的链表结构
{
QueuePtr front; //队头指针
QueuePtr rear; //队尾指针
}LinkQueue;
//创建一个队列
void InitQueue(LinkQueue *q)
{
q->front = q->rear = (QueuePtr)malloc(sizeof(Qnode));
if (!q->front)
{
exit(0);
}
q->front->next = NULL;
}
- //入队列操作
void InsertQueue(LinkQueue *q, ElemType e)
{
QueuePtr p;
p = (QueuePtr)malloc(sizeof(Qnode));
if (!p)
{
exit(0);
}
p->data = e;
p->next = NULL;
q->rear->next = p;
q->rear = p;
}
//出队列操作
void DeleteQueue(LinkQueue *q, ElemType *e)
{
QueuePtr p;
if (q->front = q->rear) //空队列
{
return;
}
p = q->front->next;
*e = p->data;
q->front->next = p->next;
if (q->rear = p) //原队列只有一个元素的情况,删除该节点,队列为空队列
{
q->rear = q->front;
}
free(p);
}
//销毁一个队列
void DestoryQueue(LinkQueue *q)
{
while (q->front)
{
q->rear = q->front->next; //从头向后删
free(q->front);
q->front = q->rear;
}
}
//求队列长度
int LenQueue(LinkQueue *q)
{
QueuePtr t = q->front->next;
int len = 0;
while (t)
{
t = t->next;
len++;
}
return len;
}
//判断队列是否为空
bool EmptyQueue(LinkQueue *q)
{
if (q->front == q->rear)
return true;
else
return false;
}
//输出队列元素
void DisQueue(LinkQueue *q)
{
QueuePtr p = q->front->next;
printf("此时的链队列输出:\n");
while (p)
{
printf("%c", p->data);
p = p->next;
}
printf("\n");
}
//获取队首元素
ElemType QueueFront(LinkQueue *q)
{
return q->front->data;
}
//获取队尾元素
ElemType QueueRear(LinkQueue *q)
{
return q->rear->data;
}
//创建一个长度由自己确定的队列并初始化
void CreateQueue(LinkQueue *q)
{
ElemType d;
int len, i;
QueuePtr p;
printf("请输入队列的长度:");
scanf("%d", &len);
for (i = 0; i < len; i++)
{
p = (QueuePtr)malloc(sizeof(Qnode));
if (!p)
{
exit(0);
}
scanf("%c", &d);
p->data = d;
p->next = NULL;
q->rear->next = p;
q->rear = p;
}
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。