社区
C语言
帖子详情
求先入先出(FIFO)缓冲区算法
microchu
2005-06-30 06:34:13
缓冲区大小10M,用来存放二进制数据,缓冲区的使用遵循以下规则
1)先入先出
2)取出后的空间视为空,可以再次存放数据
请写出存取接口函数:
1)存数据函数要求第一个参数为要存入数据的大小,第二个参数为存入数据的指针
2) 取数据函数要求第一个参数为要取出数据的大小,第二个参数为存放取出数据的指针
请各位先写写看,晚上回来跟大家讨论
...全文
598
7
打赏
收藏
求先入先出(FIFO)缓冲区算法
缓冲区大小10M,用来存放二进制数据,缓冲区的使用遵循以下规则 1)先入先出 2)取出后的空间视为空,可以再次存放数据 请写出存取接口函数: 1)存数据函数要求第一个参数为要存入数据的大小,第二个参数为存入数据的指针 2) 取数据函数要求第一个参数为要取出数据的大小,第二个参数为存放取出数据的指针 请各位先写写看,晚上回来跟大家讨论
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
summercloth
2005-07-01
打赏
举报
回复
#define BUFFER_SIZE (unsigned long )10000000
unsigned char BUFFER[BUFFER_SIZE] = {0};
unsigned char *pBufferFront = (unsigned char *)BUFFER;
unsigned char *pBuffereEnd = (unsigned char *)BUFFER +BUFFER_SIZE -1;
unsigned char *pBufferCur = pBufferFront;
unsigned char Buffer_Put(unsigned long put_size,unsigned char *put_pointer)
{
unsigned long current_size;
unsigned long count;
if(put_size > (pBufferCur - pBufferFront))
return FALSE;
for(count = 0;count<put_size;count++)
*pBufferCur-- = *put_pointer++;
}
unsigned char Buffer_Get(unsigned long get_size,unsigned char *get_pointer)
{
unsigned long count;
unsigned char *move_pointer = pBuffereEnd;
if(get_size>BUFFER_SIZE- pBufferCur)
return FALSE;
for(count = 0;count<get_size;count++)
*get_pointer++ = *move_pointer--;
for(count = 0,pBufferCur = pBuffereEnd;count < move_pointer - pBufferCur;count++)
*pBufferCur-- = *move_pointer--;
return TRUE;
}
look01
2005-07-01
打赏
举报
回复
待会帮你看看,呵呵!
microchu
2005-06-30
打赏
举报
回复
这个题目,我觉得看上去像是循环队列,但是不能用链表实现,或者说用链表实现不简单。
因为循环队列链表算法是单个存入或取出对象,本例则是一次存取指定Size大小的数据量,
在边界上存取数据是本例的一个难点。
boxban
2005-06-30
打赏
举报
回复
#include <iostream>
#include <cstdlib>
#include <cassert>
using namespace std;
class MyBuf
{
public:
MyBuf(int n = 10 * 1024 * 1024)
{
assert (n > 0);
m_buf = new char[n];
m_head = m_buf;
m_size = 0;
m_capacity = n;
}
~MyBuf() { delete []m_buf;}
public:
int write(int size, const char* data);
int read(int size, char* buf);
private:
const char* getBufferEnd() const { return (m_buf + m_capacity); }
private:
char* m_buf;
char* m_head;
int m_size;
int m_capacity;
};
//return size if OK. -1 means overflow.
int MyBuf::write(int size, const char* data)
{
assert(size > 0);
if ((size + m_size) > m_capacity) return -1;
int tailBytes = getBufferEnd() - (m_head + m_size);
if (tailBytes >= size){
memcpy(m_head + m_size, data, size);
}else{
if (tailBytes > 0){
memcpy(m_head + m_size, data, tailBytes);
memcpy(m_buf, data + tailBytes, size - tailBytes);
}else{
memcpy(m_buf - tailBytes, data, size);
}
}
m_size += size;
return size;
}
int MyBuf::read(int size, char* buf)
{
assert(size > 0);
if (size > m_size) return -1;
int n = getBufferEnd() - m_head;
if (n >= size){
memcpy(buf, m_head, size);
m_head += size;
}else{
memcpy(buf, m_head, n);
memcpy(buf + n, m_buf, size - n);
m_head = m_buf + size - n;
}
m_size -= size;
if (m_size == 0) m_head = m_buf;
return size;
}
int main()
{
MyBuf buf(12);
char tmp[100];
buf.write("abchello", (int)sizeof("abchello") - 1);
buf.read(tmp, 3);
tmp[3] = 0;
cout << tmp << endl;
buf.write(" world!", (int)sizeof(" world!") - 1);
buf.read(tmp, 12);
tmp[12] = 0;
cout << tmp << endl;
return 0;
}
ericqxg007
2005-06-30
打赏
举报
回复
刚开始看题目还以为是什么东西 仔细看还是数据结构的东西
楼主 这个题目就是要你建立队列 而且使用线性实现的
megaboy
2005-06-30
打赏
举报
回复
这就是队列嘛,一个FIFO的动态链表就得了。
microchu
2005-06-30
打赏
举报
回复
顶,还有没有更好的
308-置换策略
FIFO
算法
的实现
先进
先出
(
FIFO
)
FIFO
策略把分配给进程的页框看做是一个循环
缓冲区
,按循环方式移动页。 它所需要的只是一个指针,这个指针在该进程的页框中循环。 因此这是一种实现起来最简单的页面置换策略。除了它的简单性,...
android开发常用的缓存策略详解(2)- 先进
先出
(
FIFO
)置换
算法
那么什么是
FIFO
算法
呢?这是最早出现的置换
算法
。该
算法
总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。该
算法
实现简单,只需把一个进程已调入内存的页面,按先后次序链接成一个队列,并...
fifo
算法
_页面置换
算法
五大盘点
页面置换
算法
:地址映射过程中,若在页面中发现所要访问的页面不在内存中,...01最佳置换
算法
(OPT)从主存中移出永远不再需要的页面,如无这样的页面存在,则选择最长时间不需要访问的页面。于所选择的被淘汰页面将是...
先进
先出
(
FIFO
)页面置换
算法
C语言实现、最近最久未使用(LRU)页面置换
算法
C语言实现
页面置换
算法
C语言实现(先进
先出
FIFO
、最近最久未使用LRU C语言实现)
ARM平台
FIFO
缓冲区
设计与实现
在本章节中,我们深入探讨了
FIFO
数据结构的写入...
FIFO
(First-In-First-Out)是一种先进
先出
的数据结构,广泛应用于内存缓冲、任务调度等领域。在
FIFO
的使用过程中,能够准确检测其空满状态对系统的稳定运行至关重要。
C语言
70,020
社区成员
243,263
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章