单链表通讯录数据结构中插入一个按照号码排序功能
时间: 2023-08-02 10:39:59 浏览: 54
为了实现按照号码排序的功能,我们需要在插入新节点时,将它插入到正确的位置上。具体实现步骤如下:
1. 新建一个节点,存储待插入的联系人信息;
2. 遍历链表,找到第一个电话号码大于待插入联系人电话号码的节点,记为`prev_node`;
3. 将新节点的next指针指向`prev_node`的下一个节点;
4. 将`prev_node`的next指针指向新节点;
5. 更新链表大小。
以下是按照号码排序的单链表通讯录数据结构插入代码实现:
```c
void insert_by_phone(struct List* list, struct Contact contact) {
struct Node* new_node = (struct Node*)malloc(sizeof(struct Node));
new_node->data = contact;
new_node->next = NULL;
struct Node* prev_node = NULL;
struct Node* curr_node = list->head;
while (curr_node != NULL && strcmp(curr_node->data.phone, contact.phone) < 0) {
prev_node = curr_node;
curr_node = curr_node->next;
}
if (prev_node == NULL) {
new_node->next = list->head;
list->head = new_node;
} else {
new_node->next = prev_node->next;
prev_node->next = new_node;
}
list->size++;
}
```
在此实现中,我们使用了`strcmp`函数来比较电话号码大小,如果返回值小于0,则表示第一个字符串小于第二个字符串,反之大于0;如果等于0,则表示两个字符串相等。利用这个信息,我们就可以找到正确的插入位置并插入新节点了。