题目链接:7-34 通讯录的录入与显示
一. 题目
1. 题目
2. 输入输出格式
3. 输入输出样例
4. 限制
二、代码
1. 代码实现
#include <iostream>
using namespace std;
// 单条记录的信息
class infoContext {
private:
char name[11];
char date[11];
char man;
char telephone[17];
char phone[17];
public:
infoContext() {
cin >> name >> date >> man >> telephone >> phone;
}
void print() {
printf("%s %s %s %c %s\n", name, telephone, phone, man, date);
}
};
// 链表节点
template<typename T>
class node {
private:
T *value;
node* next;
public:
node(T *value) {
this->value=value;
this->next=this;
}
node *getNext() {
return next;
}
void setNext(node *p) {
this->next = p;
}
T *getValue() {
return value;
}
};
template<typename T>
// 带头尾的链表
class list {
private:
node<T>* head;
node<T>* tail;
int length;
public:
list() {
head = tail = 0;
length = 0;
}
node<T> *GetHead() {
return head;
}
node<T> *GetTail() {
return tail;
}
int len() {
return length;
}
void insertHead(node<T> *p) {
if (head) {
p->setNext(head);
tail->setNext(p);
head = p;
} else {
head = tail = p;
}
length ++;
}
void insertTail(node<T> *p) {
if (head) {
p->setNext(head);
tail->setNext(p);
tail = p;
} else {
head = tail = p;
}
length ++;
}
// 返回链表中第index个节点,初始序号为0
node<T> *search(int index) {
if (index >= length || index < 0) {
return NULL;
}
node<T> *p = head;
while(index > 0) {
p = p->getNext();
index--;
}
return p;
}
};
int main(void) {
list<infoContext> info;
int len, search, index;
cin >> len;
for (int i = 0; i < len; i++) {
infoContext *text = new infoContext();
info.insertTail(new node<infoContext>(text));
}
cin >> search;
while (search > 0) {
cin >> index;
node<infoContext> *p = info.search(index);
if (p) { // 如果找到
p->getValue()->print(); //定位该节点并打印
} else {
cout << "Not Found" << endl;
}
search--;
}
// 分配的资源需要释放(没写)
return 0;
}