顺序循环队列
#include<stdio.h>
#define MAXSIZE 100
typedef int DataType;
typedef struct
{
DataType data[MAXSIZE];
int front,rear;
}SqQueue;
bool Init(SqQueue &q)
{
q.front =q.rear =-1;
return true;
}
bool QueueEmpty(SqQueue q)
{
return (q.front ==q.rear ?true:false);
}
bool QueueFull(SqQueue q)
{
return (q.front ==(q.rear+1)%MAXSIZE ?true:false);
}
bool EnQueue(SqQueue &q,DataType e)//进栈 将元素e插入到栈中 作为新栈项
{
if(QueueFull(q))
return false;
q.rear =(q.rear +1)%MAXSIZE;
q.data [q.rear ]=e;
return true;
}
bool DeQueue(SqQueue &q,DataType e)
{
if(QueueEmpty(q))
return false;
q.front =(q.front +1)%MAXSIZE;
q.data [q.front ]=e;
return true;
}
bool QueueFront(SqQueue q,DataType &e)
{
if(QueueEmpty(q))
return false;
e=q.data [(q.front +1)%MAXSIZE];
return true;
}
int Length(SqQueue q)
{
return(q.rear -q.front +MAXSIZE)%MAXSIZE;
}
int main()
{
}
链式队列
#include<stdio.h>
#include<malloc.h>
typedef int DataType;
typedef struct node
{
DataType data;
struct node* next;
} QueueNode;
typedef struct
{
QueueNode *front;
QueueNode *rear;
}LinkQueue;
LinkQueue * Init()
{
LinkQueue *q;
QueueNode *p;
q=(LinkQueue *)malloc(sizeof(LinkQueue));
p=(QueueNode *)malloc(sizeof(QueueNode));
p->next =NULL;
q->front =q->rear =p;
return q;
}
bool QueueEmpty(LinkQueue *q)
{
return (q->front ==q->rear ?true:false);
}
void En(LinkQueue *q,DataType e)
{
QueueNode *s;
s=(QueueNode *)malloc(sizeof(QueueNode));
s->data =e;
s->next =NULL;
q->rear->next =s;
q->rear =s;
}
int De(LinkQueue *q,DataType &e)
{
QueueNode *p;
p=q->front->next ;
e=p->data ;
q->front->next =p->next ;
free(p);
if(q->front->next==NULL)
q->rear =q->front ;
return true;
}
int Len(LinkQueue *q)
{
QueueNode *p;
int len=0;
p=q->front->next ;
while(p)
{
len++;
p=p->next ;
}
return len;
}
int main()
{
}