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个字节,计算机读内存的时候会从起始地址开始读, ...
随机推荐
- 已知二叉树的中序序列为DBGEAFC,后序序列为DGEBFCA,给出相应的二叉树
面对这种问题时我们该怎么解决? 今天写数据结构题.发现了一道总是碰见问题的题在这里我写了一种求解方法我自己称它为分层递归求解. 第一步通过观察我们知道后序遍历时最后一个是根节点A 在中序序列中A的左边 ...
- Oracle拾遗
这次学习Oracle视频.还是学到了不少东西的. 首先,这是一次系统的学习.对自己的知识体系是一次查漏补缺,曾经仅仅是简单的会用,如今看到出的问题,非常easy就能够想到是哪一部分出了问题.尤其是如今 ...
- 利用photoshop的动作功能实现图片批处理操作
首先,通过"窗体菜单"点击"动作".启动动作栏. 然后.通过动作栏的菜单,新建动作. 接着,完毕一个标准操作,包含打开图像,图像处理或者格式转换,另存为,等. ...
- 理解FPGA中的RAM、ROM和CAM;ROM、RAM、DRAM、SRAM、FLASH
目前大多数FPGA都有内嵌的块RAM(Block RAM),可以将其灵活地配置成单端口RAM(DPRAM,Single Port RAM).双端口RAM(DPRAM,Double Ports RAM) ...
- javascript中运算符有哪些? 他们的优先级 呢?
一元操作符 ++, -- + -(正负)逻辑操作符 ! && ||基本运算符 +, -, *, /, %关系操作符 >, <, >=, <=, ===, ==, ...
- P2038 无线网络发射器选址
题目描述 随着智能手机的日益普及,人们对无线网的需求日益增大.某城市决定对城市内的公共场所覆盖无线网. 假设该城市的布局为由严格平行的129 条东西向街道和129 条南北向街道所形成的网格状,并且相邻 ...
- c#记录日志的方法
/// <summary> /// 生成日志 /// </summary> /// <param name="text"></param& ...
- express随笔
Express 是node 第三方框架,框架的意义就在于能大大简化程序地开发.看一下Express是怎么简化node程序开发的. 1,用Express写一个hello world 程序,我们来体验一下 ...
- react入门安装
react的入门安装 1.react的适用方法有两种,其一是依赖在线的cdn地址: https://reactjs.org/docs/cdn-links.html 官方给的cdn地址如下 <sc ...
- HOJ——T 2430 Counting the algorithms
http://acm.hit.edu.cn/hoj/problem/view?id=2430 Source : mostleg Time limit : 1 sec Memory limit : 64 ...