/* // 前条件:用户触发了“删除联系人信息”按钮,并输入了联系人信息 // 后条件:将用户输入的联系人信息从 myList 表中删除 */ bool MyClass::deleteUsrInfo(std::string &uNumber, std::string &uName, std::string &uAddress) { if ( !findUsrInfo(uNumber, uName, uAddress) ) { // 联系人不存在 return false; } else { ListNode *front = NULL, *current = NULL; int ct = cantor( uNumber.substr(3) ); current = myList[ct]; while ( current != NULL ) { if (current -> usrNumber == uNumber && lowerCompare(current -> usrName, uName) && lowerCompare(current -> usrAddress, uAddress)) { if (current == myList[ct]) { // 首节点 myList[ct] = current -> next; } else { // 中间或尾节点 front -> next = current -> next; } delete current; // 删除节点 break; } front = current, current = current -> next; }// End of while return true; }// End of else }
/* // 前条件:用户输入了联系人信息 // 后条件:将合法的联系人信息通过哈希法插入到 myList 表中 */ void MyClass::insertUsrInfo(std::string &uNumber, std::string &uName, std::string &uAddress) { int ct = cantor( uNumber.substr(3) ); // 取手机号码后 8 位作康托展开 ListNode *ptr = new ListNode(); ptr -> usrNumber = uNumber; ptr -> usrName = uName; ptr -> usrAddress = uAddress; ptr -> next = myList[ct], myList[ct] = ptr; // 插入表头 }
/* // 前条件:用户触发了“查找联系人信息”按钮,并输入了联系人信息 // 后条件:查找用户所请求的联系人信息,结果返回指针结果节点的指针 */ ListNode* MyClass::searchUsrInfo(std::string &uNumber, std::string &uName) { if ( isOkey(uNumber) ) { int ct = cantor( uNumber.substr(3) ); ListNode *ptr = myList[ct]; while (ptr != NULL) { if (ptr -> usrNumber == uNumber && lowerCompare(ptr -> usrName, uName)) { return ptr; } ptr = ptr -> next; }// End of while } return NULL; }
/* // 前条件:用户输入了联系人信息 // 后条件:从 myList 表中查找合法的联系人信息 */ bool MyClass::findUsrInfo(std::string &uNumber, std::string &uName, std::string &uAddress) { if (!isOkey(uNumber)) { // 长度不足 11 位 或者 是非法字符串(不是数字串) return false; } else { int ct = cantor( uNumber.substr(3) ); ListNode *ptr = myList[ct]; while ( ptr != NULL ) { if (ptr -> usrNumber == uNumber && lowerCompare(ptr -> usrName, uName) && lowerCompare(ptr -> usrAddress, uAddress)) { return true; } ptr = ptr -> next; }// End of while return false; }// End of else }
int main() { int t,i; long *ip; scanf("%d",&t); ip = (long*) calloc(t,sizeof(long)); for(i=0;i<t;i++) scanf("%ld",&ip[i]); for(i=0;i<t;i++){ printf("TERM %ld IS ",ip[i]); cantor(ip[i]); printf("\n"); } return 0; }