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个字节,计算机读内存的时候会从起始地址开始读, ...
随机推荐
- 网页载入进度条中的javascript
demo地址:http://output.jsbin.com/buquyedosa 思路例如以下:代码都有凝视,就不一一介绍了. <!DOCTYPE html> <html> ...
- vue18 动画
<!-- bower-> (前端)包管理器 npm install bower -g 验证: bower --version bower install <包名> bower ...
- BZOJ2020: [Usaco2010 Jan]Buying Feed II
[传送门:BZOJ2020] 简要题意: 约翰开车回家,遇到了双十一节,那么就顺路买点饲料吧.回家的路程一共有E 公里,这一路上会经过N 家商店,第i 家店里有Fi 吨饲料,售价为每吨Ci 元.约翰打 ...
- php 扩展
如何利用PHP扩展函数,扩展出自己的函数等 php扩展函数有哪些zend_parse_parameters() spprintf() RETURN_STRINGL()
- Spring Security Architecture--官方
原文地址:https://spring.io/guides/topicals/spring-security-architecture/ Table of contents Authenticatio ...
- tomcat加载web.xml
这几天看tomcat的源码,疑问很多,比如之一“ tomcat 怎么加载 web.xml”,下面是跟踪的过程,其中事件监听器有一个观察者模式,比较好.记录下来以供参考 >>>> ...
- 不允许 ASSIGNMENT 语句中包含 FOR XML 子句。
DECLARE @guidList NVARCHAR(max) SELECT @guidList=( CAST(OrderGUID AS nvarchar(max)) +',') FROM Order ...
- mysql安装遇到的坑
安装mysql的三步: mysqld --initialize-insecure mysqld -install net start mysql 中间遇到了坑, 看这篇文章完美的解决了,记录一下 .以 ...
- linux安装lrzsz支持rz从windows上传文件到linux
1.下载lrzsz wget https://wangxuejin-data-1252194948.cos.ap-shanghai.myqcloud.com/lrzsz-0.12.20.tar.gz ...
- Spring MVC 转发和重定向
本文介绍Spring MVC中转发和重定向的区别. 转发和重定向 开始Java EE时,可能会对转发(forward)和重定向(redirect)这个两个概念不清楚.本文先通过代码实例和运行结果图片感 ...