首页 > 代码库 > Poj_1002 487-3279
Poj_1002 487-3279
题目链接:http://poj.org/problem?id=1002
思路:
先对输入字符进行处理,转换为标准形式;插入标准形式的电话号码到查找树中,若有相同号码计数器增加1,再中序遍历查找树。
代码:
#include <stdio.h>#include <stdlib.h>#include <string.h>struct TreeNode;typedef char ElementType[30];typedef struct TreeNode *Position;typedef struct TreeNode *SearchTree;struct TreeNode{ int Count; ElementType Element; SearchTree Left; SearchTree Right;};void StrToNum( char *str , char * Tel );SearchTree MakeEmpty( SearchTree T );SearchTree Insert( ElementType X, SearchTree T );void PrintTel( SearchTree T );int flag = 0;int main(){ int n; char Str[100], Tel[100]; SearchTree T = NULL; menset( Tel, 0, sizeof(Tel) ); scanf( "%d", &n ); for ( int i = 0; i < n; ++i ) { scanf( "%s", Str ); StrToNum( Str, Tel ); T = Insert( Tel, T ); } PrintTel( T ); if ( flag == 0 ) printf( "No duplicates.\n" ); return 0;}void PrintTel( SearchTree T ){ if ( T != NULL ) { PrintTel( T->Left ); if ( T->Count > 1 ) { printf( "%s %d\n", T->Element, T->Count ); flag = 1; } PrintTel( T->Right ); }}SearchTree MakeEmpty( SearchTree T ){ if ( T != NULL ) { MakeEmpty( T->Left ); MakeEmpty( T->Right ); free( T ); } return NULL;}SearchTree Insert( ElementType X, SearchTree T ){ if ( T == NULL ) { T = ( Position )malloc( sizeof( struct TreeNode ) ); if ( T == NULL ) { printf( "Out of space" ); return NULL; } else { strcpy( T->Element, X ); T->Left = T->Right = NULL; } } else if ( strcmp(X, T->Element) < 0 ) T->Left = Insert( X, T->Left ); else if ( strcmp(X, T->Element) > 0 ) T->Right = Insert( X, T->Right); return T; }void StrToNum( char *str , char * Tel ){ int i, j; for ( i = j = 0; str[i] != ‘\0‘; i++ ) { if ( str[i] == ‘-‘ ); else if ( ‘0‘ <= str[i] && str[i] <= ‘9‘ ) Tel[j++] = str[i]; else if ( str[i] < ‘Q‘ ) Tel[j++] = ( str[i] - ‘A‘ ) / 3 + 2 + ‘0‘; else Tel[j++] = ( str[i] - ‘A‘ - 1 ) / 3 + 2 + ‘0‘; if ( j == 3 ) Tel[j++] = ‘-‘; }}
Poj_1002 487-3279
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。