QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1416|回复: 17

今天面试的一道题!

[复制链接]
发表于 2005-3-29 15:12:51 | 显示全部楼层 |阅读模式
要求用c实现如下功能:

1、建立一个缓冲区最大为10m用于存储数据和取出数据
2、要求每次存储的数据放在前一次存储数据的后面排队。
3、取出数据时,按照后进先出的原则,既把最后一次存储的数据取出,同时把那段空间释放。

怎样实现?
发表于 2005-3-29 15:47:07 | 显示全部楼层
一个桟?
回复

使用道具 举报

 楼主| 发表于 2005-3-29 16:14:04 | 显示全部楼层
对,和栈的功能是一样的
回复

使用道具 举报

发表于 2005-3-29 17:27:50 | 显示全部楼层
汗~随便哪本数据结构的书上都会讲的啊,就是用一个数组实现桟……
回复

使用道具 举报

发表于 2005-3-30 08:46:55 | 显示全部楼层
[quote:52802d25f1="sjinny"]汗~随便哪本数据结构的书上都会讲的啊,就是用一个数组实现桟……[/quote]
有没有可能,一个10m的缓冲区,里面存储大小不同的对象(比如,长度不同的字符串)。我看见10m的第一个反映是10m byte。

我最近发现,大量频繁的malloc和free会使程序变得特别特别慢。使用缓冲区是个很好的主意。
回复

使用道具 举报

 楼主| 发表于 2005-3-30 09:44:44 | 显示全部楼层
用数组或者用struct当然没问题,可那个10m的缓冲区怎么弄啊?没申请过这么大的缓冲。 10*1024*1024吗?怎样判断是否写满?每写进一次数据就比较一次吗?感觉有点怪怪的诶
回复

使用道具 举报

发表于 2005-3-30 16:08:16 | 显示全部楼层
存的时候是队列,取的时候是栈。不一定要用顺序结构,可以试试链式结构。不然每次取数据都要释放空间的。
回复

使用道具 举报

发表于 2005-3-30 17:30:37 | 显示全部楼层
既把最后一次存储的数据取出,同时把那段空间释放。

既然题目要求每取一次数据就要进行一次内存释放……
回复

使用道具 举报

发表于 2005-3-31 03:35:02 | 显示全部楼层
[quote:6cf6285790="sjinny"]
既把最后一次存储的数据取出,同时把那段空间释放。

既然题目要求每取一次数据就要进行一次内存释放…… [/quote]

有理,俺没主意。
回复

使用道具 举报

发表于 2005-3-31 13:03:48 | 显示全部楼层
//: test.c
#include <malloc.h>
#include <string.h>

typedef char* Data ;

struct Buffer {
         Data *buff ;
         int bottum ;
         int top ;
} buffer ;

void* buffInitial() {
        Data* fp = ( Data* )malloc( 10 * 1024 * 1024 * sizeof( Data* ) ) ;
        buffer.buff = fp ;
        buffer.bottum = 0 ;
        buffer.top = 0 ;
        return buffer.buff ;
}        

void  additionContent() {
        strcpy( buffer.buff[ ++buffer.top ] , "abc" ) ;
}

void releaseContent() {
        --buffer.top ;
}
               
void buffFree() {
        free( buffer.buff ) ;
}

main() {
        buffInitial() ;
        additionContent() ;
               buffFree() ;
}              

看看贴题吗?
回复

使用道具 举报

发表于 2005-3-31 15:03:40 | 显示全部楼层
这段代码运行出现错误啊
Segmentation fault
回复

使用道具 举报

发表于 2005-3-31 17:42:38 | 显示全部楼层
作弊啊,一个动态栈就行了
回复

使用道具 举报

发表于 2005-3-31 18:04:09 | 显示全部楼层
用stl算不算作弊?
回复

使用道具 举报

发表于 2005-4-1 09:56:22 | 显示全部楼层
我做的那个程序怎么在我这里可以运行呢.
没有什么错误呀!
回复

使用道具 举报

发表于 2005-4-1 14:50:36 | 显示全部楼层
1、建立一个缓冲区最大为10m用于存储数据和取出数据

仔细看看条件1吧,这是定容的缓冲区,直接用数组就成了,要什么动态分配?!

这个例子很简单的,代码在《C语言大全》里有。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-6 09:37 , Processed in 0.049357 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表