#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define Buff_MAX 10 //初始空闲缓冲区的个数
typedef struct buffernode
{
int buf_type; //"0"空闲缓冲区,"-1"装输入数据的缓冲区,"1"装输出数据的缓冲区
int buf_data; //循环区数据
struct buffernode *next; //指向下一个指针
}node;
node *tempnode;
/********************************************************************
函数说明:建立空闲缓冲队列,每个空闲缓冲区内的数据存放“-32768”。
返回值: 返回队列的头指针
********************************************************************/
node *creat( ) /*建立空闲缓冲队列*/
{
node *head,*p1,*p2 = NULL;
int i;
head=NULL;
for(i=1;i<=Buff_MAX;i++)
{
p1=(node *)malloc(sizeof(node));
p1->buf_type=0;
p1->buf_data=-32768;
if(head==NULL){
head=p1;
p2=p1;
}
else{
p2->next=p1;
p2=p1;
}
p2->next=NULL;
}
return head;
}
/********************************************************************
函数说明:该函数打印三个缓冲队列的数据情况
返回值: 无
********************************************************************/
void print_buf(node *emq, node *inq, node *outq)
{
node *p,*q,*r;
p=emq;
q=inq;
r=outq;
printf("空闲缓冲区队列emq内容:\n");
if(!p)
{
printf("该缓冲池为空!");
}
else
{
while(p)
{
printf("%7d",p->buf_data);
p=p->next;
}
printf("\n");
}
printf("输入缓冲区队列inq:\n");
if(!q)
{
printf("input buffer is empty!\n");
}
else
{
while(q)
{
printf("%7d",q->buf_data);
q=q->next;
}
printf("\n");
}
printf("输出缓冲区队列outq:\n");
if(!r)
{
printf("output buffer is empty!\n");
}
else
{
while(r)
{
printf("%7d",r->buf_data);
r=r->next;
}
printf("\n");
}
}
/********************************************************************
函数说明: 该函数从队首读一个数据出来,使用tempnode 指向队首第一个结点
返回值:队列指针head
********************************************************************/
node *Getbuf(node *head)
{
node *r;
head=head->next;
return head;
}
/********************************************************************
函数说明: 该函数从插入一个结点到队未。
返回值:队列指针head
********************************************************************/
node *Putbuf(node *head, node *newnode)
{
node *p,*q;
p=head;
while(p->next){
p=p->next;
}
p->next=newnode;
newnode->next=NULL;
return head;
}
/**************从这里开始为测试程序**********************/
void main(int argc, char *argv[])
{
int flag;
node *emq,*inq,*outq;
node *hin,*sin,*sout,*hout;
emq=creat();
inq=NULL;
outq=NULL;
print_buf(emq,inq,outq);
printf("\n######################\n");
printf("what do you want to do?\n");
printf("1. 收容输入\n");
printf("2. 提出输入\n");
printf("3. 收容输出\n");
printf("4. 提出输出\n");
printf("5. 退出\n");
printf("\nInput your choice:\n");
scanf("%d",&flag);
while(flag!=5)
{
switch(flag)
{
case 1:
printf("收容输入,请输入数据:");
Getbuf(emq);
print_buf(emq, inq, outq);
tempnode->buf_type=-1;
scanf("%d",tempnode->buf_data);
Putbuf(inq,tempnode);
print_buf(emq, inq, outq);
break;
case 2:
Getbuf(inq);
tempnode->buf_data=-32768;
tempnode->buf_type=0;
tempnode->next=inq;
Putbuf(emq,tempnode);
print_buf(emq, inq, outq);
break;
case 3:
Getbuf(emq);
tempnode->buf_type=1;
scanf("%d",tempnode->buf_data);
Putbuf(outq,tempnode);
print_buf(emq, inq, outq);
break;
case 4:
Getbuf(outq);
tempnode->buf_data=-32768;
tempnode->buf_type=0;
tempnode->next=inq;
Putbuf(emq,tempnode);
print_buf(emq, inq, outq);
break;
default:
printf("输入有误!");
}
printf("\n######################\n");
printf("what do you want to do?\n");
printf("1. 收容输入\n");
printf("2. 提出输入\n");
printf("3. 收容输出\n");
printf("4. 提出输出\n");
printf("5. 退出\n");
printf("\nInput your choice:\n");
scanf("%d",&flag);
}
}
缓冲池
最新推荐文章于 2024-05-28 20:50:59 发布