📄 bufferqueue.h
字号:
#define BUFFERSIZE 100
typedef struct
{
char data[BUFFERSIZE];
int front,rear;
}BUFFERQUEUE;
BUFFERQUEUE bufferqueue;
int empty(BUFFERQUEUE *bq)
{
if(bq->rear==bq->front)
return 1;
else
return 0;
}
char getfront(BUFFERQUEUE *bq)
{
char v;
if(empty(bq))
{
//EMPTY
v=NULL;
}
else
v=bq->data[(bq->front+1)%BUFFERSIZE];
return v;
}
int enqueue(BUFFERQUEUE *bq,char x) //入队
{
int r;
if(bq->front==(bq->rear+1)%BUFFERSIZE)
{
//FULL
//当缓冲队列满时,最后一个从文件读入的字符并没有放入缓冲队列中,因此需要将文件指针后退一个字符
r=0;
}
else
{
bq->rear=(bq->rear+1)%BUFFERSIZE;
(bq->data)[bq->rear]=x;
r=1;
}
return r;
}
char dequeue(BUFFERQUEUE *bq) //出队
{
char v;
if(empty(bq))
{
//EMPTY;
//当缓冲队列空时,应调用读取文件内容至缓冲区的函数
v=NULL;
}
else
{
bq->front=(bq->front+1)%BUFFERSIZE;
v=(bq->data)[bq->front];
}
return v;
}
void LoadFileToBuffer(FILE *fp) //加载文件内容至缓冲队列
{
char readchar;
int eof_f;
eof_f=feof(fp);
while(eof_f!=16)
{
fread(&readchar,sizeof(char),1,fp);
if(enqueue(&bufferqueue,readchar)==0)
{
fseek(fp,-1,1); //回退一个字符
break;
}
eof_f=feof(fp);
//发现每次文件结尾处的缓冲队列总是多读入一个相同的字符
if(eof_f==16)
{
if(bufferqueue.rear!=0)
bufferqueue.rear-=1;
else
bufferqueue.rear=BUFFERSIZE-1;
}
}
}
char ReadBuffer(FILE *fp) //取缓冲队列中的一个字符
{
if(empty(&bufferqueue))
{
LoadFileToBuffer(fp);
}
return dequeue(&bufferqueue);
}
void backfront(BUFFERQUEUE *bq) //回退操作
{
//if(empty(&bufferqueue)!=1)
//{
if(bq->front!=0)
bq->front-=1;
else
bq->front=BUFFERSIZE-1;
//}
}
int BufferEmpty()
{
return empty(&bufferqueue);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -