队列
基本定义
只能在对头插入和在队尾删除的线性表
代码:
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define MAXSIZE 20
typedef int Status;
typedef int QElemType
/*循环队列*/
typedef struct _SqQueue
{
QElemType data[MAXSIZE];
int front;
int rear;
} SqQueue;
/*初始化队列*/
Status InitQueue(SqQueue *q)
{
q->front=0;
q->rear=0;
return OK;
}
/*求队列的长度*/
int QueueLength(SqQueue *q)
{
return (q->rear-q->front+MAXSIZE)%MAXSIZE;
}
/*进队*/
Status EnQueue(SqQueue *q,QElemType e)
{
/*队满*/
if((q->rear+1)%MAXSIZE==q->front)
{
return ERROR;
}
q->data[q->rear]=e;
q->rear=(q->rear+1)%MAXSIZE;
return OK;
}
/*出队*/
Status DeQueue(SqQueue *q,QElemType *e)
{
/*队空*/
if(q->rear==q->front)
{
return ERROR;
}
*e=q->data[q->front];
q->front=(q->front+1)%MAXSIZE;
return OK;
}
/**链队列**/
/*节点*/
typedef struct _QNode
{
QElemType data;
struct _QNode *next;
}QNode,*QNodePtr;
typedef struct _LinkQueue
{
QNodePtr front,rear;
}LinkQueue;
/*进队*/
Status EnQueue(LinkQueue *q,QElemType e)
{
QNodePtr p;
p=(QNodePtr)malloc(sizeof(QNode));
p->data=e;
p->next=NULL;
q->rear->next=p;
q->rear=p;
return OK;
}
/*出队*/
Status DeQueue(LinkQueue *q,QElemType *e)
{
if(q->rear==q->front)
{
return ERROR;
}
QNodePtr p;
p=q->front->next;
*e=p->data;
if(p==q->rear)
{
q->front->next=NULL;
q->rear=q->front;
}
else
{
q->front->next=p->next;
}
free(q);
return OK;
}
170万+

被折叠的 条评论
为什么被折叠?



