方法1
PUBLIC short *make_pair_table(const char *structure)
{
/* returns array representation of structure.
table[i] is 0 if unpaired or j if (i.j) pair. */
short i,j,hx;
short length;
short *stack;
short *table;
length = (short) strlen(structure);
stack = (short *) space(sizeof(short)*(length+1));
table = (short *) space(sizeof(short)*(length+2));
table[0] = length;
for (hx=0, i=1; i<=length; i++) {
switch (structure[i-1]) {
case '(':
stack[hx++]=i;
break;
case ')':
j = stack[--hx];
if (hx<0) {
fprintf(stderr, "%s\n", structure);
nrerror("unbalanced brackets in make_pair_table");
}
table[i]=j;
table[j]=i;
break;
default: /* unpaired base, usually '.' */
table[i]= 0;
break;
}
}
if (hx!=0) {
fprintf(stderr, "%s\n", structure);
nrerror("unbalanced brackets in make_pair_table");
}
free(stack);
return(table);
}
方法二
int naview_xy_coordinates(short *pair_table, float *X, float *Y) {
int i;
nbase = pair_table[0]; /* length */
bases = (struct base *) space(sizeof(struct base)*(nbase+1));
regions = (struct region *) space(sizeof(struct region)*(nbase+1));
read_in_bases(pair_table);
lencut = 0.5;
rlphead = NULL;
find_regions();
loop_count = 0;
loops = (struct loop *) space(sizeof(struct loop)*(nbase+1));
construct_loop(0);
find_central_loop();
if (debug) dump_loops();
traverse_loop(root,NULL);
for (i=0; i<nbase; i++) {
X[i] = 100 + 15*bases[i+1].x;
Y[i] = 100 + 15*bases[i+1].y;
}
free(bases);
free(regions);
free(loops);
return nbase;
}
PUBLIC short *make_pair_table(const char *structure)
{
/* returns array representation of structure.
table[i] is 0 if unpaired or j if (i.j) pair. */
short i,j,hx;
short length;
short *stack;
short *table;
length = (short) strlen(structure);//structure的长度
stack = (short *) space(sizeof(short)*(length+1));//stack是一个short型的指针数组,这里是分配空间
table = (short *) space(sizeof(short)*(length+2));//table和stack类似
table[0] = length;
for (hx=0, i=1; i<=length; i++) {
switch (structure[i-1]) {//访问structure数组遍历,进行括号匹配
case '(':
stack[hx++]=i;//括号开始就+1
break;
case ')':
j = stack[--hx];
if (hx<0) {
fprintf(stderr, "%s\n", structure);
nrerror("unbalanced brackets in make_pair_table");
}
table[i]=j;//存放左括号所在位置
table[j]=i;//存放右括号所在位置
break;
default: /* unpaired base, usually '.' */
table[i]= 0;
break;
}
}
if (hx!=0) {
fprintf(stderr, "%s\n", structure);
nrerror("unbalanced brackets in make_pair_table");
}
free(stack);//释放空间
return(table);//返回括号匹配结果
}
你哪里不懂,就复制相应函数,上网找吧,如果逻辑不懂,你翻译java也会有问题吧,慢慢练习,急不得追问
本来我也这么想的,还专门看了下C 的语法,但是我的这个工具里面全是算法,很多,hold不住,也没有注释,一个方法调另一个方法的