顺序队列(循环队列)
#define N 10
typedef int datatype;
typedef struct{
datatype data[N];
int front;
int rear;
}Seqqueues;
创建空循环队列
Seqqueues* create_Seqqueues(void){
Seqqueues * sq=(Seqqueues*)malloc(sizeof(Seqqueues));
if(sq==NULL){
printf("创建顺序栈失败\n");
return NULL;
}
sq->front=sq->rear=0;
return sq;
}
判断满
int isFull_Seqqueues(Seqqueues* sq){
return (sq->rear+1)%N==sq->front ? 1:0;
}
判断空
int isEmpty_Seqqueues(Seqqueues * sq)
{
return sq->rear==sq->front ? 1:0;
}
入队
void Seqqueues_push(Seqqueues* sq,datatype data){
if(isFull_Seqqueues(sq)==1){
printf("入队失败\n");
return;
}
sq->data[sq->rear]=data;
sq->rear=(sq->rear+1)%N;
return;
}
出队
datatype Seqqueues_pop(Seqqueues* sq){
if(isEmpty_Seqqueues(sq)==1){
printf("出队失败\n");
return (datatype) -1;
}
datatype data =sq->data[sq->front];
sq->front=(sq->front+1)%N;
return data;
}
遍历
void traversal_Seqqueues(Seqqueues* sq){
for(int i=sq->front;i!=sq->rear;i=(i+1)%N){
printf("%d\t",sq->data[i]);
}
printf("\n");
}
获取队列的长度
int Seqqueues_len(Seqqueues* sq){
int count=0;
// for(int i=sq->front;i!=sq->rear;i=(i+1)%N) count++;
count=(sq->rear-sq->front+N)%N;
return count;
}
释放队列
void Seqqueues_free(Seqqueues** sq){
free(*sq);
*sq=NULL;
printf("%p\n",*sq);
return ;
}