单链表的小例子(三)链表读取和保存

#include <stdio.h>
#include <malloc.h>
#include <string.h> 

struct address
{
	int a;
	int b;
	char c;
	struct address *next;
}; 

void SaveToFile(struct address *p, FILE *fp)
{
	if(p != NULL)
	{
		do
		{
			fwrite(p, sizeof(struct address), 1, fp);
			p = p->next;
		} while(p != NULL);
	}
} 

int load(FILE *fp, struct address **head)
{
	int n=0;
	struct address *p1,*p2;
	*head = (struct address *) malloc(sizeof(struct address));
	memset(*head, 0, sizeof(struct address));
	if( fread(*head, sizeof(struct address), 1, fp) != 1)
	{
		free(*head);
		*head = NULL;
		return(0);
	}
	p2 = *head;
	n++;
	while( !feof(fp))
	{
		p1 = (struct address *) malloc(sizeof(struct address));
		fread(p1, sizeof(struct address), 1, fp);
		p2->next = p1;
		p2 = p1;
		n++;
	}
	p2->next = NULL;
	return(n);
} 

void main()
{
	struct address *head;
	struct address *Test[10] = {0};
	int i = 0;
	FILE *fp = NULL; 

	for(i=0; i < 10; i++)
	{
		Test[i] = (struct address *)malloc(sizeof(struct address));
		if(Test[i] != NULL)
		{
			memset(Test[i], 0, sizeof(struct address));
			Test[i]->a = 65 + i;
			Test[i]->b = 65 + i;
		} 

	}
	for(i = 0; i < 10; i++)
	{
		if(i < 10)
		{
			Test[i]->next = Test[i+1];
		}
	}
	if((fp = fopen("addrbook.txt", "wb")) != NULL)
	{
		SaveToFile(Test[0], fp);
		fclose(fp);
	}
	if((fp = fopen("addrbook.txt", "rb")) != NULL)
	{
		load(fp, &head);
	}
}

  

时间: 2025-01-10 01:34:00

单链表的小例子(三)链表读取和保存的相关文章

单链表的小例子(一)

#include<stdio.h> #include<stdlib.h> #include<string.h> //定义一个存放数据的结构体 typedef struct { int num; char name[20]; }DATA; //定义链表 typedef struct node { DATA data; struct node *next; }NODE,*PNODE; DATA getData();//模拟接受数据 PNODE createNode(DATA

单链表的小例子(二)增、删、查、改、排序

#include<stdio.h> #include<stdlib.h> #include<string.h> //定义一个结构体存放数据 typedef struct { int num; char name[20]; }DATA; //定义链表 typedef struct node { DATA data; struct node *next; }NODE,*PNODE; DATA getData();//模拟接受数据 PNODE createNode(DATA

react表单的一些小例子

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" con

【模板小程序】链表排序(qsort/insert_sort/merge_sort)

前言 本文章整理了链表排序的三种方法,分别是快速排序.插入排序.归并排序.为适应不同用途,先给出常用的int版本,再在此基础上抽象出类模板. 目录 一.针对整数的版本(常用) 文中链表定义 链表相关操作 三种排序方法 完整测试程序 二.模板版本(适用性广泛) 文中链表定义 链表相关操作 三种排序方法 完整测试程序 总结 参考文章 一.针对整数的版本(常用) 文中链表定义: 1 //definition for singly-linked list. 2 struct ListNode 3 { 4

数据结构与算法JavaScript (三) 链表

数据结构与算法JavaScript (三) 链表 我们可以看到在javascript概念中的队列与栈都是一种特殊的线性表的结构,也是一种比较简单的基于数组的顺序存储结构.由于 javascript的解释器针对数组都做了直接的优化,不会存在在很多编程语言中数组固定长度的问题(当数组填满后再添加就比较困难了,包括添加删除, 都是需要把数组中所有的元素全部都变换位置的,javascript的的数组确实直接给优化好了,如 push,pop,shift,unshift,split方法等等…) 线性表的顺序

合并两个有序的单链表,合并之后的链表依然有序【出现频率高】

合并两个有序的单链表,合并之后的链表依然有序: 这道题经常被各公司考察. 例如: 链表1:   1->2->3->4 链表2:   2->3->4->5 合并后:   1->2->2->3->3->4->4->5 解题思路:   挨着比较链表1和链表2.   这个类似于归并排序.尤其要注意两个链表都为空.和其中一个为空的情况.只需要O (1) 的空间.时间复杂度为O (max(len1,len2)) public Node me

数据结构与算法三(链表)

一.链表 1.什么是链表 和数组一样,链表也是一种线性表 从内存结构上看,链表的内存结构是不连续的内存空间,是将一组零散的内存块串联起来,从而进行数据存储的数据结构 链表中的每一个内存块被称为节点Node,节点除了存储数据外,还需记录链上下一个节点的地址,即后继指针next 2.常见的缓存策略 先进先出策略FIFO (First In,First Out) 最少使用策略LFU (Least Frequently Used) 最近最小使用策略LRU(Least Recently Used) 3.常

数据结构与算法(三)--链表

一.链表 单项链表.循环链表.双向链表 链表和数组不同,链表的每个元素都存储了下一个元素的地址,所以链表不需要连续的存储空间: 如果我们申请一个 100MB 大小的数组,当内存中没有连续的.足够大的存储空间时,即便内存的剩余总可用空间大于 100MB,仍然会申请失败. 1.单链表:内存块称为链表的"结点",把这个记录下个结点地址的指针叫作后继指针 next 头结点用来记录链表的基地址.有了它,我们就可以遍历得到整条链表.而尾结点特殊的地方是:指针不是指向下一个结点,而是指向一个空地址

HTML5实战 文摘 第二章 HTML5用于创建表单的输入小部件 数据绑定以及数据验证

HTML5表单在原有表单特性的基础上增加了一些比较便捷的特性,使得我们实现一些常用的表单的小部件.输入类型.输入验证不再那么大费周章.上一篇文章提到了HTML5实现的几种新的输入类型,现在我们更加详尽的了解HTML5的表单产生的新特性和功能. 1. 输入类型和输入属性 菜鸟教程上给出了HTML5新增加的input输入类型,可以在上面尝试一下不同类型的样子,基本可以满足日常开发需求了.类型不同会照成什么内在差异呢?主要有三点,首先,浏览器会根据输入类型进行基本的数据校验,例如type="email