作者在 2008-11-09 08:54:18 发布以下内容
(一)采用的数据描述为:循环队列采用顺序结构
#define MAXQSIZE 100/*循环队列的最大长度*/ 最多能放99个
typedef struct{int base[MAXQSIZE]; /*存放元素的数组空间*/
int front; /*“头指针”*/
int rear; /*“尾指针”*/
}Sqqueue;
1、入队
Squeue enqueue(Sqqueue Q,int x) /*在循环队列Q中,插入新元素使其成为队尾元素*/
{ if ((Q.rear+1)%MAXQSIZE==Q.front) printf("ERROR");/*若队列满,插入操作出错*/
Q.base[Q.rear]=x;/*新元素成为队尾元素*/
Q.rear=(Q.rear+1)%MAXQSIZE;/*利用模运算,“尾指针”加1*/
return Q; }
2、出队
Squeue dequeue(Sqqueue Q)/*在循环队列Q中,删除Q的队首元素*/
{ if (Q.front==Q.rear) printf("ERROR");/*若队列空,删除操作出错*/
x=Q.base[Q.front];/*取队首元素*/
Q.front=(Q.front+1)%MAXQSIZE;/*利用模运算,“头指针”加1*/
return Q;}
3、队列长度
int queuelength(Squeue Q)
struct QNODE *next;
}QNODE,*Queueptr;
typedef struct{Queueptr front;
Queueptr rear;
}Linkqueue;
1、初始化
Linkqueue init(linkqueue Q)
{Q.Front=Q.Rear=(Queueuptr)malloc(sizeof(QNODE));
if(!Q.front)printf("OVERFLOW");
Q.Front->next;
return Q;}
2、入队
Squeue enqueue(Sqqueue Q,int x) /*队列Q中,插入新元素使其成为队尾元素*/
{ p=(Queueptr)malloc(sizeof(QNODE));
if (!p) printf("OVERFLOW");/*若队列满,插入操作出错*/
p->data=x;/*新元素成为队尾元素*/
P->next=NULL; Q.rear=p;/*使尾指针总是指向最后一个元素的后一个*/
return Q; }
3、出队
Squeue dequeue(Sqqueue Q)/*队列Q中,删除Q的队首元素*/
{ if (Q.front==Q.rear) printf("ERROR");/*若队列空,删除操作出错*/
P=Q.rear->next;/*取队的第一个元素*/
Q.front->next=p->next;/*删除第一个元素*/
if(Q.rear==p)Q.rear=Q.front;/*当p指向尾指针*/
free(p);
return Q;}
#define MAXQSIZE 100/*循环队列的最大长度*/ 最多能放99个
typedef struct{int base[MAXQSIZE]; /*存放元素的数组空间*/
int front; /*“头指针”*/
int rear; /*“尾指针”*/
}Sqqueue;
1、入队
Squeue enqueue(Sqqueue Q,int x) /*在循环队列Q中,插入新元素使其成为队尾元素*/
{ if ((Q.rear+1)%MAXQSIZE==Q.front) printf("ERROR");/*若队列满,插入操作出错*/
Q.base[Q.rear]=x;/*新元素成为队尾元素*/
Q.rear=(Q.rear+1)%MAXQSIZE;/*利用模运算,“尾指针”加1*/
return Q; }
2、出队
Squeue dequeue(Sqqueue Q)/*在循环队列Q中,删除Q的队首元素*/
{ if (Q.front==Q.rear) printf("ERROR");/*若队列空,删除操作出错*/
x=Q.base[Q.front];/*取队首元素*/
Q.front=(Q.front+1)%MAXQSIZE;/*利用模运算,“头指针”加1*/
return Q;}
3、队列长度
int queuelength(Squeue Q)
{return(Q.rear-Q.front+MAXSIZE)%MAXSIZE;}
(二)采用的数据描述为:队列采用链式结构(带有头结点)
struct QNODE *next;
}QNODE,*Queueptr;
typedef struct{Queueptr front;
Queueptr rear;
}Linkqueue;
1、初始化
Linkqueue init(linkqueue Q)
{Q.Front=Q.Rear=(Queueuptr)malloc(sizeof(QNODE));
if(!Q.front)printf("OVERFLOW");
Q.Front->next;
return Q;}
2、入队
Squeue enqueue(Sqqueue Q,int x) /*队列Q中,插入新元素使其成为队尾元素*/
{ p=(Queueptr)malloc(sizeof(QNODE));
if (!p) printf("OVERFLOW");/*若队列满,插入操作出错*/
p->data=x;/*新元素成为队尾元素*/
P->next=NULL; Q.rear=p;/*使尾指针总是指向最后一个元素的后一个*/
return Q; }
3、出队
Squeue dequeue(Sqqueue Q)/*队列Q中,删除Q的队首元素*/
{ if (Q.front==Q.rear) printf("ERROR");/*若队列空,删除操作出错*/
P=Q.rear->next;/*取队的第一个元素*/
Q.front->next=p->next;/*删除第一个元素*/
if(Q.rear==p)Q.rear=Q.front;/*当p指向尾指针*/
free(p);
return Q;}