大并发数据队列
2016-12-26 09:04
260 查看
图解
#include<stdio.h>
#include<stdlib.h>
#include<memory.h>
#define N 100
#define mytype int
struct MyQueue
{
mytype data
;//数组存储队列
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");
}
#include<stdio.h>
#include<stdlib.h>
#include<memory.h>
#define N 100
#define mytype int
struct MyQueue
{
mytype data
;//数组存储队列
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");
}
相关文章推荐
- 关于PHP堆栈与列队的学习
- ASIHTTPRequest和ASINetworkQueue实现队列下载
- 列队-小型计算器
- queue-队列模块
- python实现列队
- 哇塞 终于AC掉了这个“水题” 洛谷P1540机器翻译
- Android 状态栏隐藏问题
- 结构体变量的引用和赋值
- MYSQL索引
- Linux三剑客之sed
- RequestDispatcher
- 在代码中设置textview的颜色
- LeetCode Add Two Numbers II
- Web Form 和asp.net mvc 差别
- MSSQL操作类
- snmp自定义处理程序
- C++之继承与多态
- 正则验证手机号码
- 装饰器模式
- mysql日常运维与参数调优