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个字节,计算机读内存的时候会从起始地址开始读, ...
随机推荐
- mysql中lock tables与unlock tables(锁表/解锁)使用总结
php mysql lock tables 使用有感 mysql 的 表锁 lock tables 感觉就像一个 封闭的空间 mysql发现 lock tables 命令的时候,会将带有锁标记的表(t ...
- ArcGIS api for javascript——渲染-计算相等间隔分级
描述 本例展示了如何配置分级渲染使用一个相等间隔分类.在这个分类类型中,断点被设置为相等的距离. 可以手工添加相等距离的断点:然而,如果数据被修改了,那些断点就会是不合理的.本例自动地计算断点,因此相 ...
- ArcGIS api for javascript——合并两个ArcGIS Online服务
描述 这个示例创建一个地图并ArcGIS Online增加连个图层到地图.ArcGIS Online是由ESRI体提供的一组切片地图服务,可以用来通过高质量的地图和数据增强应用.这个示例增加影像和运输 ...
- 怎样使Dialog像Activity一样随心所欲的使用?
怎样使Dialog像Activity一样随心所欲的使用? android中的Dialog像是寄生在Activity中.在弹出Dialog时.因受到系统风格定义,导致Dialog怎么也不能如意,那么今天 ...
- vue29-vue2.0组件通信_recv
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Microsoft office2016(专业增强版) 安装错误,报CRT(KB2999226)
对着这个错误的出现,网上有解释,这里不多说(实际是我没有找到比较靠谱的说法..),跟Window Update这个服务有关. 首先打开”Windows人为管理器”->"服务" ...
- Node书签
1.开源项目 [译]过去一年25个惊人的开源Node.js项目(2018版) 百度网盘下载助手
- cors跨域的前端实现---根据资料整合的
1.服务端 搁response中增加Access-Control-Allow-Origin:‘*’ eg: context.Response.AddHeader("Access-Contr ...
- 【使用uWSGI和Nginx来设置Django和你的Web服务器】
目录 安装使用uWSGI 配置Nginx结合uWSGI supervisor Django静态文件与Nginx配置 @ *** 所谓WSGI . WSGI是Web服务器网关接口,它是一个规范,描述了W ...
- HRBUST 1376 能量项链
能量项链 Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on HRBUST. Original ID: 13 ...