• 68.qq号索引结构体写入内存,并实现快速排序


      1 //两个步骤,第一步读取文件,并且初始化索引结构体,把初始化的索引结构体写入到文件,第二步,读取这个文件到索引结构体
      2 //并对这个结构体进行快速排序,得到顺序的索引,再写入文件
      3 #define _CRT_SECURE_NO_WARNINGS
      4 #include<stdio.h>
      5 #include<stdlib.h>
      6 
      7 char path[256] = "QQ.txt";
      8 char indexpath[256] = "QQindex8848.txt";
      9 char sortindexpath[256] = "QQsortindex8848.txt";
     10 
     11 #define allN 84331072
     12 
     13 struct INDEX
     14 {
     15     //QQ号
     16     long long QQ;
     17     //索引
     18     int index;
     19 };
     20 //简化索引
     21 typedef struct INDEX Index;
     22 
     23 //从字符串获取qq号,存放在tmp中,并在tmp中提取QQ号
     24 void getQQ(char *str, char *tmp)
     25 {
     26     strcpy(tmp, str);
     27     char *p = tmp;
     28     while (*p)
     29     {
     30         if (*p == '-')
     31         {
     32             *p = '';
     33             break;
     34         }
     35         p++;
     36     }
     37 }
     38 
     39 //每一行读取到索引
     40 void main1()
     41 {
     42     FILE *pfr = fopen(path, "r");
     43     FILE *pfw = fopen(indexpath, "wb");
     44 
     45     while (!feof(pfr))
     46     {
     47         //获取当前文件指针距离开头的位置,在读取之前读取,读取的是每一行开头的位置
     48         int index = ftell(pfr);
     49 
     50         char str[50] = { 0 };
     51         //读取
     52         fgets(str, 50, pfr);
     53         char tmp[50] = { 0 };
     54         //获取QQ到tmp
     55         getQQ(str, tmp);
     56         //把QQ转换成long long类型
     57         long long lltmp = atoll(tmp);
     58         if (lltmp==0)
     59         {
     60             continue;
     61         }
     62         Index in1 = { 0 };
     63         in1.QQ = lltmp;
     64         in1.index = index;
     65         //把索引结构体写入
     66         fwrite(&in1, sizeof(in1), 1, pfw);
     67     }
     68 
     69     fclose(pfr);
     70     fclose(pfw);
     71     printf("索引OK");
     72     system("pause");
     73 }
     74 
     75 //比较两个结构体
     76 int com(void *p1, void *p2)
     77 {
     78     Index *pl1 = p1;
     79     Index *pl2 = p2;
     80     if (pl1->QQ >pl2->QQ)
     81     {
     82         return 1;
     83     }
     84     else if (pl1->QQ <pl2->QQ)
     85     {
     86         return -1;
     87     }
     88     else
     89     {
     90         return 0;
     91     }
     92 
     93 }
     94 
     95 //读取到结构体
     96 void main()
     97 {
     98     FILE *pfr = fopen(indexpath, "rb");
     99     FILE *pfw = fopen(sortindexpath, "wb");
    100     //分配这么多个索引结构体(包括qq号和位置),并读取
    101     Index *p = malloc(allN*sizeof(Index));
    102     fread(p, sizeof(Index), allN, pfr);
    103 
    104     //对读取的结构体进行排序
    105     qsort(p, sizeof(Index), allN,com );
    106 
    107     //写入
    108     fwrite(p, sizeof(Index), allN, pfw);
    109 
    110     //关闭文件
    111     fclose(pfr);
    112     fclose(pfw);
    113 
    114     system("pause");
    115 }
  • 相关阅读:
    SQL分组统计
    实用DOS命令
    Shadertoy 教程 Part 6 使用光线步进算法创建3D场景
    浅谈web前端优化
    如何搭建一套前端监控系统
    with(this)中with的用法及其优缺点
    vue mvvm
    散列表(哈希表)(二)散列函数的构造方法
    作为程序员,你最常上的网站是什么
    散列表(哈希表)(一)散列表的概念
  • 原文地址:https://www.cnblogs.com/xiaochi/p/8445869.html
Copyright © 2020-2023  润新知