首页 > 代码库 > 大并发数据队列
大并发数据队列
图解
#include<stdio.h>
#include<stdlib.h>
#include<memory.h>
#define N 100
#define mytype int
struct MyQueue
{
mytype data[N];//数组存储队列
int front;//拉屎
int rear;//吃东西
};
typedef struct MyQueue myQ;
//初始化
void init(myQ *p)
{
p->front = p->rear = 0;
memset(p->data,0,sizeof(mytype)*N);
}
void print(myQ *p)
{
if(isempty(p)==1)
{
return 0;
}else{
int i;
for(i=p->front;i<p->rear;i++)
{
printf("%d",p->data[i]);
}
}
}
int isfull(myQ *p)
{
if(p->rear == N)
{
return 1;
}else
{
return 0;
}
}
int isempty(myQ *p)
{
if(p->front==p->rear)
{
return 1;
}else{
return 0;
}
}
void enQ(myQ *p,mytype insertdata)
{
if(isfull(p)==1)
{
return;
}else{
p->data[p->rear] = insertdata;
p->rear+=1;
}
}
mytype deQ(myQ *p)
{
if(isempty(p)==1)
{
return 0;
}
int index = (p->rear)-(p->front);
if(index==1)
{
return p->data[0];
}else{
int i;
// printf("\n index=%d",index);
for(i=0;i<index-1;i++)
{
p->data[i] = p->data[i+1];
}
--p->rear;
}
//printf("\n index=%d",p->rear);
return p->data[p->rear];
}
mytype array_shift(myQ *p)
{
if(isempty(p)==1)
{
exit(1);
}
else{
int num = p->front;
free(p->data[num]);
return p->data[p->front++];
}
}
mytype array_pop(myQ *p)
{
if(isempty(p)==1)
{
return 0;
}else{
int num = p->rear;
free(p->data[num]);
return p->data[--p->rear];
}
}
void main()
{
myQ my1;//创建结构体
init(&my1);
enQ(&my1,1);
enQ(&my1,2);
enQ(&my1,3);
enQ(&my1,4);
printf("\npop =%d",array_pop(&my1));
printf("\nnumber=%d",array_shift(&my1));
printf("\n one=%d",array_shift(&my1));
printf("\n two = %d",array_shift(&my1));
printf("\n three = %d",array_shift(&my1));
system("pause");
}
大并发数据队列