您的位置:首页 > 职场人生

百度面试题及我的解答(5)-2 step5 & step6 代码

2009-12-06 19:31 316 查看
函数Step5TraverseProcess:

void Step5TraverseProcess(WORD_NODE* plist, ostream& out)
{
WORD_NODE* pnext = plist;
vector<WORD_NODE*> VarWordsList;
vector<WORD_NODE*>::iterator i;
// list<WORD_NODE*> 使用STL链表保存结果,链表的每一个节点是WORD_NODE链表,这个WORD_NODE链表中保存的都是变位词
// 遍历WORD_NODE List,读取每一个WORD;
// 遍历VarWordsList;比较wordNode->SortedStr和VarWordsList的每一个节点,相同则插入到该节点。
// 遍历结束没有找到,则插入到VarWordsList末尾。

do
{
bool bFoundVarNode = false;
for ( i = VarWordsList.begin(); i < VarWordsList.end(); i++ )
{
WORD_NODE *pSortedWord = (*i);
if ( 0 == strcmp(pSortedWord->sorted_str, pnext->sorted_str) )
{
WORD_NODE* ptemp = pnext;
pnext = pnext->next;

WORD_NODE* ptemp2 = pSortedWord->next;
pSortedWord->next = ptemp;
ptemp->next =ptemp2;
bFoundVarNode = true;
break;
}
}
if ( !bFoundVarNode )
{
WORD_NODE *ptemp = pnext;
pnext = pnext->next;
ptemp->next = NULL;
VarWordsList.push_back(ptemp);
}
}	while (NULL != pnext);

for ( i = VarWordsList.begin(); i < VarWordsList.end(); i++ )
{
vector<char*> str_arr;
vector<char*>::iterator j;
WORD_NODE *pWordList = (*i);
//		out << pWordList->sorted_str << ":/t";
while ( NULL != pWordList ){
bool bSameWord = false;
for ( j = str_arr.begin(); j < str_arr.end(); j++)
{
char* pword = (*j);
if ( 0 == strcmp(pword, pWordList->str) ){
bSameWord = true;
}
}
if ( !bSameWord)
{
out << pWordList->str << "/t";
str_arr.push_back(pWordList->str);
}
pWordList = pWordList->next;
}
out << "/n";
}

}


函数Step6TraverseProcess:

#define VARWORDS_SIZE 100
void Step6TraverseProcess(WORD_NODE* plist, ostream& out)
{
WORD_NODE* pnext = plist;
WORD_NODE* VarWordsList[VARWORDS_SIZE];
int cur_pos=0;
memset(VarWordsList, 0, sizeof(WORD_NODE*)*VARWORDS_SIZE);
// list<WORD_NODE*> 使用STL链表保存结果,链表的每一个节点是WORD_NODE链表,这个WORD_NODE链表中保存的都是变位词
// 遍历WORD_NODE List,读取每一个WORD;
// 遍历VarWordsList;比较wordNode->SortedStr和VarWordsList的每一个节点,相同则插入到该节点。
// 遍历结束没有找到,则插入到VarWordsList末尾。
WORD_NODE head;
WORD_NODE* phead = &head;
memset(phead, 0, sizeof(WORD_NODE));

do
{
bool bFoundVarNode = false;
for ( int i = 0; i < VARWORDS_SIZE; i++ )
{
if ( NULL == VarWordsList[i] ){ break;}

WORD_NODE *pSortedWord = VarWordsList[i];
if ( 0 == strcmp(pSortedWord->sorted_str, pnext->sorted_str) )
{
WORD_NODE* ptemp = pnext;
pnext = pnext->next;
ptemp->next = NULL;

phead = &head;
phead->next = pSortedWord;
bool bInOutList = false;
while ( NULL != phead->next )
{
int iRet = strcmp(phead->next->str, ptemp->str);
if ( iRet >= 0){
WORD_NODE* ptemp2 = phead->next;
phead->next = ptemp;
ptemp->next = ptemp2;
bInOutList = true;
VarWordsList[i]=head.next;
break;
}
phead = phead->next;
}

if ( !bInOutList ){
phead->next = ptemp;
}
bFoundVarNode = true;
break;
}
}
if ( !bFoundVarNode )
{
WORD_NODE *ptemp = pnext;
pnext = pnext->next;
ptemp->next = NULL;
if ( cur_pos >= VARWORDS_SIZE ){
cerr << "VarWordsList overflow" << endl;
exit(-3);
}
VarWordsList[cur_pos++] = ptemp;
}
}	while (NULL != pnext);

for (int  i = 0; i < VARWORDS_SIZE; i++ )
{
if ( NULL == VarWordsList[i] ){ break;}
WORD_NODE* pwordlist = VarWordsList[i];
do {
if ( NULL == pwordlist->next ) { out << pwordlist->str << " "; break;}
if ( 0 != strcmp(pwordlist->str, pwordlist->next->str) ) { out << pwordlist->str << " ";}
//			out << pwordlist->str << " ";
pwordlist = pwordlist->next;
} while ( NULL != pwordlist );
out << "/n";
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐