数据结构之链式队列
//PreDef.h: 预定义常量和类型
//===================head.h====================================
//head.h
#ifndef _hhlisst_
#define _hhlisst_
#define TRUE
1
#define FALSE
0
#define OK
1
//成功
#define ERROR
0 //失败(错误)
#define INFEASIBLE -1 //不可行的
#define OVERFLOW -2 //(内存)溢出
#define UNDERFLOW -4 //(数组下标)下溢
#define ENDELEM -9999 //序列结束元素(为方便演示而设)
typedef int QElemType;
//元素类型ElemType为int
typedef int Status;
//元素类型ElemType为int
#define LIST_INIT_SIZE 100
//顺序表初始容量(能容纳的元素个数)
#define LISTINCREMENT 10
//容量增量
typedef struct QNode
#endif
//===============================================================
#include
#include
#include "headd.h"
// 构造一个空队列Q
if(!(Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode))))
exit(OVERFLOW);
Q.front->next=NULL;
return OK;
// 销毁队列Q(无论空否均可)
while(Q.front)
{
Q.rear=Q.front->next;
free(Q.front);
Q.front=Q.rear;
}
return OK;
// 将Q清为空队列
QueuePtr p,q;
Q.rear=Q.front;
p=Q.front->next;
Q.front->next=NULL;
while(p)
{
q=p;
p=p->next;
free(q);
}
return OK;
// 若Q为空队列,则返回TRUE,否则返回FALSE
if(Q.front==Q.rear)
return TRUE;
else
return FALSE;
// 求队列的长度
int i=0;
QueuePtr p;
p=Q.front;
while(Q.rear!=p)
{
i++;
p=p->next;
}
return i;
// 若队列不空,则用e返回Q的队头元素,并返回OK,否则返回ERROR
QueuePtr p;
if(Q.front==Q.rear)
return ERROR;
p=Q.front->next; //结构体嵌套
e=p->data;
return OK;
// 插入元素e为Q的新的队尾元素
QueuePtr p;
if(!(p=(QueuePtr)malloc(sizeof(QNode)))) // 存储分配失败
exit(OVERFLOW);
p->data=e;
p->next=NULL;
Q.rear->next=p;
Q.rear=p;
return OK;
// 若队列不空,删除Q的队头元素,用e返回其值,并返回OK,否则返回ERROR
QueuePtr p;
if(Q.front==Q.rear)
return ERROR;
p=Q.front->next;
e=p->data;
Q.front->next=p->next;
if(Q.rear==p)
Q.rear=Q.front;
free(p);
return OK;
printf("%d ",i);