
先优化下程序吧。你的每个8万行的list,读取完第一个文件,在读取第二个文件的时候释放吗?
你“将这个list跟3万行的list 遍历通过相同的id获取3万行里的手机号码。”这个效率太低了,将3万行数据的list改为HashMap,key是id,value是手机号。
你的程序中有几处错误:
1 动态分配数组不能这样写:BiTNode B[n+10]; 得用new去分配内存
2 判断数值相等得用双等号:if(A[i]b=0) 得写成 if(A[i]b==0)
3 数组的下标是从0开始的,不是从1开始
可能是这几处错误导致你的内存读写出错
我在你代码的基础上进行了改动和优化:
#include <iostream>using namespace std;
typedef struct BiTNode
{
char data;
struct BiTNode lchild,rchild;
}BiTNode,BiTree;
BiTree Create(int n)
{
int i, left, right;
char ch;
BiTree T = new BiTNode[n];
for (i = 0; i < n; ++i)
{
cin >> ch >> left >> right;
T[i]data = ch;
if (left == 0)
T[i]lchild = NULL;
else
T[i]lchild = &T[left];
if (right == 0)
T[i]rchild = NULL;
else
T[i]rchild = &T[right];
}
return T;
};
void PreOrderTraverse (BiTree T)
{
if (T)
{
cout<<T->data<<" ";
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
}
void InOrderTraverse (BiTree T)
{
if (T)
{
InOrderTraverse(T->lchild);
cout<<T->data<<" ";
InOrderTraverse(T->rchild);
}
}
void PostOrderTraverse(BiTree T)
{
if (T)
{
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
cout<<T->data<<" ";
}
}
int main()
{
int i, N; //N个测试用例,需要储存N个二叉树
cin >> N;
BiTree T = new BiTree[N]; //指针数组,储存N个BiTree类型的指针
for (i = 0; i < N; i++)
{
int j, n; //每个测试用例输入n行数据
cin >> n;
T[i] = Create(n);
}
//输出
for (i = 0; i < N; i++)
{
cout<<"Case "<<i+1<<":"<<endl;
PreOrderTraverse(T[i]);
cout<<endl;
InOrderTraverse(T[i]);
cout<<endl;
PostOrderTraverse(T[i]);
cout<<endl;
delete [] T[i]; //释放Create中分配的内存
}
delete [] T;
return 0;
}
因为按照题目要求,是输入完T个测试序列后一并输出,而不是输入完一个输出一个,所以代码中还要先分配一个指针数组来存储这T个测试序列
代码编译通过,运行结果如下:
输入:
2
3
A 1 2
B 0 0
C 0 0
5
A 1 2
B 0 0
C 3 4
D 0 0
E 0 0
输出:
Case 1:
A B C
B A C
B C A
Case 2:
A B C D E
B A D C E
B D E C A
注意我的节点是从0开始标号的,所以根节点序号是0,它的两个孩子节点为1和2
望采纳,谢谢~
以上就是关于java线程池 读写10万行文件进行遍历时,占用物理内存溢出全部的内容,包括:java线程池 读写10万行文件进行遍历时,占用物理内存溢出、二叉树遍历 C++ 显示该内存不能为“read",不知道程序哪里出错了、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)