c语言如何从文件读入,并存放在链表中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言如何从文件读入,并存放在链表中相关的知识,希望对你有一定的参考价值。

参考技术A

//举个单链表的例子,首先定义链表成员的结构体 

struct filetextchar buf[BUFSIZE];

struct filetext *next;;

//读取文件,并插入进链表的函数,filename为要读取的文件名,head为链表的头节点,函数返回插入新节点后链表的头节点

struct filetext * readfile(char * filename,struct filetext * head)

 struct filetext * new = (struct filetext *)malloc(sizeof(struct filetext));//定义一个新成员,并给它分配空间

FILE * fp;//读取文件的文件流

struct filetext * p =head;//定义一个p,用来寻找链表中最后一个节点

if((fp=(fopen(filename,"r+")))==NULL)

//如果打开文件失败,返回head,并提示

printf("open file failure");

return head; 

//然后开始读取文件,放到new的buf中

if(fread(new->buf,BUFSIZE,1,fp)<1)

 //如果读取失败,提示,并返回head

printf("read file failure");

return head; 

fclose(fp);

//文件读取完后,进行链表操作

if(!head)//如果传进来的head是个空指针,那么新指针就作为头节点返回

 new->next = NULL;

return new; 

while(p->next) p = p->next;//把p移动到最后一个节点

p->next = new;//p的下一个节点为new

new->next = NULL;//new的下一个节点为空

return head;

//这样这个函数就完成了,你可以写个主函数,定义一个头节点,试下。

扩展资料:

线性表的链式存储表示的特点是用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的)。

因此,为了表示每个数据元素 与其直接后继数据元素 之间的逻辑关系,对数据元素 来说,除了存储其本身的信息之外,还需存储一个指示其直接后继的信息(即直接后继的存储位置)。由这两部分信息组成一个"结点"(如概述旁的图所示),表示线性表中一个数据元素。

线性表的链式存储表示,有一个缺点就是要找一个数,必须要从头开始找起,十分麻烦。根据情况,也可以自己设计链表的其它扩展。但是一般不会在边上附加数据,因为链表的点和边基本上是一一对应的(除了第一个或者最后一个节点,但是也不会产生特殊情况)。

不过有一个特例是如果链表支持在链表的一段中把前和后指针反向,反向标记加在边上可能会更方便。

参考资料:链表_百度百科

gdi+从文件读入图片再保存

vc 6.0 gdi+我弄好了,可以用gdi+实现图片的格式转换(确保gdi+什么的是引用正常的)。
那如何将一个图片选入dc,然后把这个dc保存为图片呢?
大约是这样的代码:
HDC imgdc=CreateCompatibleDC(NULL);
Gdiplus::Image *image=Image::FromFile(路径);
SelectObject(imgdc,image);
Bitmap bmpx(image->GetWidth(),image->GetHeight());
Graphics g(&bmpx);
HDC hdcx=g.GetHDC();
BitBlt(hdcx,0,0,image->GetWidth(),image->GetHeight(),imgdc,0,0,SRCCOPY);
CLSID encoderClsid;
GetEncoderClsid(L"image/jpeg", &encoderClsid);
bmpx.Save(L"d:\\55.jpg", &encoderClsid);
生成的文件,长宽和原来的一致,但是图片内容就是纯黑,什么都没有。这到底应该怎么写呢?

    GDI+画图是需要一个Graphic对象的, 

    读取到的Image对象,

    初始化一个Graphic对象,

    然后用这个Graphic对象画图。

    第一种:用内存流去存储。
    using(MemoryStream ms = new MemoryStream())

    image.Save(ms, ImageFormat.Jpeg);//图片保存格式
    image.save(filepath);//图片保存地址
    ms.dispose();//清空内存
    image.Dispose();//清空图片缓存

    第二种:将内存流转换为字节数组保存,效率更高
    using(MemoryStream ms=new MemoryStream())


    image.Save(ms, ImageFormat.Jpeg);
    byte[] Imgs = ms.ToArray();
    ms.Dispose();
    image.Dispose();
    System.IO.File.WriteAllBytes(filepath, Imgs);

参考技术A SelectObject(imgdc,image);
据我所知,对内存DC选入位图,只有位图跟DC兼容才有效
兼容是指位图是单色位图0和1 或者位图的位数与DC一样
可能是这个原因本回答被提问者采纳

以上是关于c语言如何从文件读入,并存放在链表中的主要内容,如果未能解决你的问题,请参考以下文章

怎样用C语言读取数据并存到顺序表(节点为一行的数据)中 形如 123,as,123 23,432,23 sd,as,23 ....

C语言中如何将文件中的数据读取到链表中

c语言如何将文件数据读入链表?用fread

C语言从文件中读出数据构造成链表

c语言中链表的问题

C语言中数据结构中的单向链表的问题;