#include<stdio.h>
#include<stdlib.h>
#define OVERFLOW -2
#define ERROR -1
#define OK 1
typedef struct QNode{
char data;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct {
QueuePtr front;
QueuePtr rear;
}LinkQueue;
QueuePtr p;
int InitQueue_L(LinkQueue &Q){
Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));
if (!Q.front) exit(OVERFLOW);
Q.front->next=NULL;
return OK;
}
int DestroyQueue_L(LinkQueue &Q) {
while(Q.front) {
Q.rear = Q.front->next;
free(Q.front);
Q.front = Q.rear;
}
return OK;
}
int EnQueue_L(LinkQueue &Q,char e){
p=(QueuePtr)malloc(sizeof(QNode));
if (!p) exit(OVERFLOW);
p->data=e;
p->next=NULL;
Q.rear->next=p;
Q.rear=p;
return OK;
}
int DeQueue_L(LinkQueue &Q,char &e){
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;
}
int main(){
LinkQueue Q;
char e='a';
InitQueue_L(Q);
for(int i=0;i<5;i++){
if(EnQueue_L(Q,e)!=1) printf("error");
e++;
}
if(DeQueue_L(Q,e)==1) printf("%c ",e);
if(DeQueue_L(Q,e)==1) printf("%c ",e);
return 0;
}
typedef struct {
char *base;
int front;
int rear;
}SqQueue;
int InitQueue_Sq(SqQueue &Q){
Q.base=(char*)malloc(MAXSIZE*sizeof(char));
if (!Q.base) exit(OVERFLOW);
Q.front=Q.rear=0;
return OK;
}
int EnQueue_Sq(SqQueue &Q,char e){//进队
if((Q.rear+1)%MAXSIZE==Q.front) return ERROR;
Q.base[Q.rear]=e;
Q.rear= (Q.rear+1)%MAXSIZE;
return OK;
}
int DeQueue_Sq(SqQueue &Q,char &e){//出队
if(Q.rear==Q.front) return ERROR;
e=Q.base[Q.front];
Q.front= (Q.front+1)%MAXSIZE;
return OK;
}
int main(){
SqQueue Q;
char e='a';
InitQueue_Sq(Q);
for(int i=0;i<9;i++){
if(EnQueue_Sq(Q,e)!=1) printf("error");
e++;
}
if(DeQueue_Sq(Q,e)==1) printf("%c ",e);
if(DeQueue_Sq(Q,e)==1) printf("%c ",e);
puts("");
for(int i=0;i<2;i++){
if(EnQueue_Sq(Q,e)!=1) printf("error");
e++;
}
if(DeQueue_Sq(Q,e)==1) printf("%c ",e);
if(DeQueue_Sq(Q,e)==1) printf("%c ",e);
return 0;
}