static inline struct page * __rb_insert_page_cache(struct inode * inode, struct page * pnode, struct rb_node * node) { struct rb_node ** p = &inode->i_rb_page_cache.rb_node; struct rb_node * parent = NULL; struct page * page; while (*p) { parent = *p; page = rb_entry(parent, struct page, rb_page_cache); if (wordcmp(pnode->word,page->word) < 0) p = &(*p)->rb_left; else if (wordcmp(pnode->word,page->word) > 0) p = &(*p)->rb_right; else return page; } rb_link_node(node, parent, p); return NULL; }
int main(int argc,char* argv[]) { FILE *fin,*fout; int i=0,j,num,exist[N]={0}; char sort[N][N],ch; char *dic[N],*tmp; freopen(argv[1],"r",stdin); freopen(argv[2],"w",stdout); while(1) { scanf("%s",sort[i++]); ch=getchar(); // if(ch==' ')ch=getchar(); // else if(ch==EOF)break; if(ch==EOF)break; else continue; } num=i; for(i=0;i<num;i++) { for(j=i+1;j<num;j++) { if(sameword(&sort[i][0],&sort[j][0])==1) { exist[j]=1;break; } } } j=0; for(i=0;i<num;i++) { if(exist[i]==0) {dic[j++]=sort[i];} } //for(i=0;i<j;i++)printf("%s ",dic[i]); //putchar(10); num=j; for(i=0;i<num;i++) { for(j=num-1;j>i;j--) { if(wordcmp(dic[j],dic[j-1])==1) { tmp=dic[j]; dic[j]=dic[j-1]; dic[j-1]=tmp; } } } //swappointer(&dic[j],&dic[j-1]); //swappointer(&dic[1],&dic[num-2]); //sortasdic(dic,num); for(i=0;i<num;i++)printf("%s ",dic[i]); fclose(stdin); fclose(stdout); return 0; }
struct page * rb_search_page_cache(struct inode * inode, struct page * node) { struct rb_node * n = inode->i_rb_page_cache.rb_node; struct page * page; while (n) { page = rb_entry(n, struct page, rb_page_cache); if (wordcmp(node->word,page->word)<0) n = n->rb_left; else if (wordcmp(node->word,page->word)>0) n = n->rb_right; else return page; } return NULL; }