📄 main.cpp
字号:
#include<stdio.h>
#include "replaceSelection.h"
#include"LoserTree.h"
void loserTreeMultiMerge(int outfilenum,char *outfile){
Buffer *bufferPool=new Buffer[outfilenum+1]; //开辟长度为outfilenum+1的缓冲池,bufferPool[0]用作输出buffer,其余的作输入buffer
node *racer=new node[outfilenum+1]; //选手
char fname [20]; //输入文件名数组
FILE ** f =new FILE*[outfilenum+1]; //输入输出文件的句柄数组.
//输出文件句柄存放在为f[0], 输入文件句柄存放在f[1]到outfilenum]
if(outfilenum>1){
LoserTree lt(outfilenum); //败方树
//初始化输出文件
f[0] = fopen(outfile,"w+");
//初始化输入缓冲区buffer[1..outfilenum]
for(int i = 1; i <= outfilenum; i++){
//初始化存放顺串的文件名,从1.txt到outfilenum.txt
_itoa(i, fname, 10);
strcat(fname, ".txt");
//初始化文件句柄数组
//句柄数组序号和文件名序号相对应,也和缓冲区号相对应
f[i] = fopen(fname, "r");
//往输入缓冲区置入数据
for(int j = 0; j < MAX_BUFFER; j++ ){
node read; //读出的数据置放在里面
if(!feof(f[i])){
fscanf(f[i], "%d %s", &read.key,read.infor);
bufferPool[i].insert(read);
}
else
break;
}//for
}//for
//初始化选手
for(int k = 1; k <= outfilenum; k++){
bufferPool[k].read(racer[k]);
}
//***调用多路归并算法,进行outfilenum路归并***//
multiMerge(lt, racer, bufferPool, f,outfilenum);
for(int n = 0; n <= outfilenum; n++){ //关闭文件句柄
fclose(f[n]);
}
for(int i = 1; i <= outfilenum; i++){ //删除生成的文件
char cmd[30]="del ",name[20];
_itoa(i, name, 10);
strcat(name, ".txt");
strcat(cmd,name);
system(cmd);
}
}
else{
char cmd[30]="copy 1.txt ";
strcat(cmd,outfile);
system(cmd);
system("del 1.txt");
}
delete [] bufferPool;
delete [] racer;
delete [] f;
printf("%s\n","归并完成");
}
int replaceSelectionMain(FILE * in){
node A[MAX];
Buffer input;
Buffer output;
//调用置换选择算法
int outputfilenum=replacementSelection(A, MAX, in, input, output);
printf("%s\n","选择排序完成");
return outputfilenum;
}
void main(){
//打开输入,输出文件;
FILE *fin,*fout;
printf("%s\n","请键入输入文件名");
char infile[20];
scanf("%s",infile);
printf("%s\n","请键入输出文件名");
char outfile[20];
scanf("%s",outfile);
fin=fopen(infile,"r");
fout=fopen(outfile,"w+");
if(fin==NULL||fout==NULL){
printf("%s\n","open file error!");
return ;
}
fclose(fout);
int outputfilenum=replaceSelectionMain(fin);
loserTreeMultiMerge(outputfilenum,outfile);
fclose(fin);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -