实现手机通讯录的新建、插入、删除与查询(要求用排序顺序表、排序单链表两种存储结构都要完成)
时间: 2023-06-19 15:05:10 浏览: 145
1. 排序顺序表实现:
定义结构体:
```c
#define MAXSIZE 1000
typedef struct{
char name[20];
char number[12];
}Contact; // 联系人结构体
typedef struct{
Contact data[MAXSIZE];
int length;
}SqList; // 顺序表结构体
```
新建通讯录:
```c
void initList(SqList *L){
L->length = 0;
}
```
插入联系人:
```c
void insertContact(SqList *L, Contact c){
if(L->length == MAXSIZE){
printf("通讯录已满,无法插入!\n");
return;
}
int i, j;
for(i = 0; i < L->length; i++){
if(strcmp(c.name, L->data[i].name) < 0){ // 找到插入位置
for(j = L->length-1; j >= i; j--){ // 后续元素后移
L->data[j+1] = L->data[j];
}
L->data[i] = c;
L->length++;
printf("联系人 %s 插入成功!\n", c.name);
return;
}
}
L->data[L->length] = c; // 插入到表尾
L->length++;
printf("联系人 %s 插入成功!\n", c.name);
}
```
删除联系人:
```c
void deleteContact(SqList *L, char* name){
int i, j;
for(i = 0; i < L->length; i++){
if(strcmp(name, L->data[i].name) == 0){ // 找到要删除的联系人
for(j = i; j < L->length-1; j++){ // 后续元素前移
L->data[j] = L->data[j+1];
}
L->length--;
printf("联系人 %s 删除成功!\n", name);
return;
}
}
printf("联系人 %s 不存在,删除失败!\n", name);
}
```
查询联系人:
```c
void searchContact(SqList L, char* name){
int i;
for(i = 0; i < L.length; i++){
if(strcmp(name, L.data[i].name) == 0){ // 找到要查询的联系人
printf("姓名:%s,电话:%s\n", L.data[i].name, L.data[i].number);
return;
}
}
printf("联系人 %s 不存在!\n", name);
}
```
2. 排序单链表实现:
定义结构体:
```c
typedef struct Node{
Contact data;
struct Node* next;
}Node;
typedef struct{
Node* head;
int length;
}LinkList;
```
新建通讯录:
```c
void initList(LinkList *L){
L->head = (Node*)malloc(sizeof(Node));
L->head->next = NULL;
L->length = 0;
}
```
插入联系人:
```c
void insertContact(LinkList *L, Contact c){
Node* p = L->head;
while(p->next != NULL && strcmp(c.name, p->next->data.name) > 0){ // 找到插入位置
p = p->next;
}
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = c;
newNode->next = p->next;
p->next = newNode;
L->length++;
printf("联系人 %s 插入成功!\n", c.name);
}
```
删除联系人:
```c
void deleteContact(LinkList *L, char* name){
Node* p = L->head;
while(p->next != NULL && strcmp(name, p->next->data.name) != 0){ // 找到要删除的联系人
p = p->next;
}
if(p->next == NULL){
printf("联系人 %s 不存在,删除失败!\n", name);
return;
}
Node* q = p->next;
p->next = q->next;
free(q);
L->length--;
printf("联系人 %s 删除成功!\n", name);
}
```
查询联系人:
```c
void searchContact(LinkList L, char* name){
Node* p = L.head->next;
while(p != NULL && strcmp(name, p->data.name) != 0){ // 找到要查询的联系人
p = p->next;
}
if(p == NULL){
printf("联系人 %s 不存在!\n", name);
}else{
printf("姓名:%s,电话:%s\n", p->data.name, p->data.number);
}
}
```
阅读全文