68.qq号索引结构体写入内存,并实现快速排序
//两个步骤,第一步读取文件,并且初始化索引结构体,把初始化的索引结构体写入到文件,第二步,读取这个文件到索引结构体
//并对这个结构体进行快速排序,得到顺序的索引,再写入文件
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h> char path[] = "QQ.txt";
char indexpath[] = "QQindex8848.txt";
char sortindexpath[] = "QQsortindex8848.txt"; #define allN 84331072 struct INDEX
{
//QQ号
long long QQ;
//索引
int index;
};
//简化索引
typedef struct INDEX Index; //从字符串获取qq号,存放在tmp中,并在tmp中提取QQ号
void getQQ(char *str, char *tmp)
{
strcpy(tmp, str);
char *p = tmp;
while (*p)
{
if (*p == '-')
{
*p = '\0';
break;
}
p++;
}
} //每一行读取到索引
void main1()
{
FILE *pfr = fopen(path, "r");
FILE *pfw = fopen(indexpath, "wb"); while (!feof(pfr))
{
//获取当前文件指针距离开头的位置,在读取之前读取,读取的是每一行开头的位置
int index = ftell(pfr); char str[] = { };
//读取
fgets(str, , pfr);
char tmp[] = { };
//获取QQ到tmp
getQQ(str, tmp);
//把QQ转换成long long类型
long long lltmp = atoll(tmp);
if (lltmp==)
{
continue;
}
Index in1 = { };
in1.QQ = lltmp;
in1.index = index;
//把索引结构体写入
fwrite(&in1, sizeof(in1), , pfw);
} fclose(pfr);
fclose(pfw);
printf("索引OK");
system("pause");
} //比较两个结构体
int com(void *p1, void *p2)
{
Index *pl1 = p1;
Index *pl2 = p2;
if (pl1->QQ >pl2->QQ)
{
return ;
}
else if (pl1->QQ <pl2->QQ)
{
return -;
}
else
{
return ;
} } //读取到结构体
void main()
{
FILE *pfr = fopen(indexpath, "rb");
FILE *pfw = fopen(sortindexpath, "wb");
//分配这么多个索引结构体(包括qq号和位置),并读取
Index *p = malloc(allN*sizeof(Index));
fread(p, sizeof(Index), allN, pfr); //对读取的结构体进行排序
qsort(p, sizeof(Index), allN,com ); //写入
fwrite(p, sizeof(Index), allN, pfw); //关闭文件
fclose(pfr);
fclose(pfw); system("pause");
}
68.qq号索引结构体写入内存,并实现快速排序的更多相关文章
- 结构体,内存,指针例题.DOC
2015.1.30 递归函数:1.自身调用自己:2.要有结束条件!typedef 后面加分号:一般后面的重定义名加_,例如:typedef unsigned long int uint_16;结构体成 ...
- C语言 结构体的内存对齐问题与位域
http://blog.csdn.net/xing_hao/article/details/6678048 一.内存对齐 许多计算机系统对基本类型数据在内存中存放的位置有限制,它们会要求这些数据的首地 ...
- C语言结构体占用空间内存大小解析
结构体的数据类型的有点我们就不啰嗦了,直接来看相同数据结构体的几种书写的格式吧. 格式一: 01.struct tagPhone 02.{ 03. char A; 04. int ...
- C语言结构体的内存对齐问题
在C语言开发当中会遇到这样的情况: #include <stdio.h> struct test { int a; char b; }; int main(int argc, const ...
- C语言结构体在内存中的存储情况探究------内存对齐
条件(先看一下各个基本类型都占几个字节): void size_(){ printf("char类型:%d\n", sizeof(char)); printf("int类 ...
- VC中结构体的内存布局
看了 VC++中内存对齐 这篇文章,感觉说复杂了,根据我的总结,要算出结构体的内存大小和偏移量,只要清楚结构体各成员的内存布局就行了,下面介绍一下我总结的规则,有不对之处,欢迎回复. 1.实际PACK ...
- 36深入理解C指针之---结构体的内存处理
一.有关结构体的内存处理包括,结构体指针和结构体成员指针的内存分配.结构体成员的数据对齐.结构体的内存释放 1.定义:与自定义数据类型(结构体)有关的内存分配.大小和释放问题 2.特征: 1).用内存 ...
- 3.c语言结构体成员内存对齐详解
一.关键一点 最关键的一点:结构体在内存中是一个矩形,而不是一个不规则形状 二.编程实战 #include <stdlib.h> #include <stdio.h> stru ...
- 实验:使用GDB查看结构体在内存中的存储方式
结构体在内存中的表示形式是怎么样的? 结构体在内存中和普通变量存储没有太大的区别. 首先我们看看,计算机如何读取普通变量: 普通变量例如int是占据4个字节,计算机读内存的时候会从起始地址开始读, ...
随机推荐
- hbase源码系列(十二)Get、Scan在服务端是如何处理
hbase源码系列(十二)Get.Scan在服务端是如何处理? 继上一篇讲了Put和Delete之后,这一篇我们讲Get和Scan, 因为我发现这两个操作几乎是一样的过程,就像之前的Put和Del ...
- c3p0出现 An attempt by a client to checkout a Connection has timed out
java.sql.SQLException: An attempt by a client to checkout a Connection has timed out. at com.mchange ...
- 多client并发登录
//LoginClient.java package mySocket; import java.io.BufferedReader; import java.io.InputStreamReader ...
- vue2.0-transition动画
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- xml Data Type Methods in sql server
nodes() Method (xml Data Type) https://docs.microsoft.com/en-us/sql/t-sql/xml/nodes-method-xml-data- ...
- Android Unknown failure (Failure - not installed for 0)
File->Settings->Build,Execuion,Deployment->Instant Run然后把Enable Instant Run to...那一项的勾去掉就好了
- Codeforces Round #240 (Div. 2) 题解
A: 1分钟题,往后扫一遍 int a[MAXN]; int vis[MAXN]; int main(){ int n,m; cin>>n>>m; MEM(vis,); ; i ...
- Flex3中addEventListener()方法使用详解
Flex控件对象.RemoteObject等都有一个共同的方法addEventListener. 方法详细信息: 来源于:flash.events.EventDispatcher类 addEventL ...
- JS — 对象的基本操作
JS面向对象系列教程 — 对象的基本操作 面向对象概述  面向对象(Object Oriented)简称OO,它是一种编程思维,用于指导我们如何应对各种复杂的开发场景. 这里说的对象(Object) ...
- 学习《Python金融实战》中文版PDF+英文版PDF+源代码
学习python处理金融数据,建议学习<Python金融实战>,比较实用,只不过Yahoo财经的API改了,书里的方法不再有效要改一改,还有就是会有一些代码缩进小问题,总体上对金融分析很实 ...