使用【c语言】实现【用单链表作存储结构,定义链表结点,构造通讯录数据结构。实现通讯录链表的创建、遍历、输出、清空、销毁、求表长,以及联系人信息的插入、删除、修改、查找等操作。】
时间: 2024-10-19 16:04:08 浏览: 46
在C语言中,我们可以使用单链表来构建一个通讯录数据结构。下面是一些基本操作的实现:
1. **创建**:使用`typedef`定义链表节点结构体(如`LNode`),其中包含姓名、电话和地址字段,以及一个指向下一个节点的指针。
```c
typedef struct Node {
char name[23];
char phone[33];
char addr[50];
struct Node* next;
} LNode;
```
2. **构造**:通过`malloc`动态分配内存创建新节点,并链接到链表头部。
```c
// 创建新节点
LNode* createNode(char* name, char* phone, char* addr) {
LNode* newNode = (LNode*) malloc(sizeof(LNode));
newNode->name = name;
newNode->phone = phone;
newNode->addr = addr;
newNode->next = NULL;
return newNode;
}
// 添加节点到链表
void addContactToList(LList* pHead, char* name, char* phone, char* addr) {
LNode* newNode = createNode(name, phone, addr);
if (pHead == NULL) {
pHead = newNode;
} else {
LNode* temp = pHead;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = newNode;
}
}
```
3. **遍历**与**输出**:定义`SLTPrint`函数遍历链表并打印节点信息。
```c
void SLTPrint(LNode* phead) {
LNode* cur = phead;
while (cur != NULL) {
printf("%d: %s (%s), %s\n", ++counter, cur->name, cur->phone, cur->addr);
cur = cur->next;
}
printf("\n");
}
```
4. **操作**:
- **插入**:在已有的链表中找到适当位置插入新节点。
- **删除**:根据节点的编号或直接地址删除节点,可能需要遍历链表找到要删除的节点。
- **修改**:同样,找到指定节点后更新其属性。
- **查找**:遍历链表直到找到特定名称、电话或地址。
5. **其他辅助函数**:实现`deleteNode`、`updateContact`、`searchContact`等函数来完成这些任务。
6. **销毁**:遍历链表,释放每个节点的内存。
```c
void destroyList(LNode* pHead) {
if (pHead != NULL) {
LNode* temp = pHead;
while (temp != NULL) {
LNode* nextTemp = temp->next;
free(temp);
temp = nextTemp;
}
}
pHead = NULL;
}
```
7. **求表长**:计算链表中的节点数量。
```c
int getLength(LNode* pHead) {
int length = 0;
LNode* temp = pHead;
while (temp != NULL) {
length++;
temp = temp->next;
}
return length;
}
```
阅读全文