用c语言写一个顺序表结构,实现电话本模拟程序,包括电话本的建立、插入、删除、修改、逆置、查找、输出,并设计一个主菜单完成各个功能的调用。
时间: 2023-04-09 13:05:04 浏览: 339
C语言使用顺序表实现电话本功能
好的,以下是一个简单的用 C 语言实现的顺序表结构,实现电话本模拟程序的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SIZE 100
typedef struct {
char name[20];
char phone[20];
} Contact;
typedef struct {
Contact data[MAX_SIZE];
int length;
} SeqList;
void init(SeqList *list) {
list->length = 0;
}
void insert(SeqList *list, Contact contact, int pos) {
if (list->length >= MAX_SIZE) {
printf("电话本已满,无法插入!\n");
return;
}
if (pos < 1 || pos > list->length + 1) {
printf("插入位置不合法!\n");
return;
}
for (int i = list->length; i >= pos; i--) {
list->data[i] = list->data[i - 1];
}
list->data[pos - 1] = contact;
list->length++;
printf("插入成功!\n");
}
void delete(SeqList *list, int pos) {
if (pos < 1 || pos > list->length) {
printf("删除位置不合法!\n");
return;
}
for (int i = pos; i < list->length; i++) {
list->data[i - 1] = list->data[i];
}
list->length--;
printf("删除成功!\n");
}
void modify(SeqList *list, int pos, Contact contact) {
if (pos < 1 || pos > list->length) {
printf("修改位置不合法!\n");
return;
}
list->data[pos - 1] = contact;
printf("修改成功!\n");
}
void reverse(SeqList *list) {
for (int i = 0; i < list->length / 2; i++) {
Contact temp = list->data[i];
list->data[i] = list->data[list->length - i - 1];
list->data[list->length - i - 1] = temp;
}
printf("逆置成功!\n");
}
int search(SeqList *list, char *name) {
for (int i = 0; i < list->length; i++) {
if (strcmp(list->data[i].name, name) == 0) {
return i + 1;
}
}
return 0;
}
void output(SeqList *list) {
printf("姓名\t电话\n");
for (int i = 0; i < list->length; i++) {
printf("%s\t%s\n", list->data[i].name, list->data[i].phone);
}
}
void menu() {
printf("**********电话本模拟程序**********\n");
printf("* 1. 插入联系人 *\n");
printf("* 2. 删除联系人 *\n");
printf("* 3. 修改联系人 *\n");
printf("* 4. 逆置电话本 *\n");
printf("* 5. 查找联系人 *\n");
printf("* 6. 输出电话本 *\n");
printf("* 0. 退出程序 *\n");
printf("***********************************\n");
}
int main() {
SeqList list;
init(&list);
int choice;
do {
menu();
printf("请输入您的选择:");
scanf("%d", &choice);
switch (choice) {
case 1: {
Contact contact;
printf("请输入联系人姓名:");
scanf("%s", contact.name);
printf("请输入联系人电话:");
scanf("%s", contact.phone);
insert(&list, contact, list.length + 1);
break;
}
case 2: {
int pos;
printf("请输入要删除的联系人位置:");
scanf("%d", &pos);
delete(&list, pos);
break;
}
case 3: {
int pos;
Contact contact;
printf("请输入要修改的联系人位置:");
scanf("%d", &pos);
printf("请输入联系人姓名:");
scanf("%s", contact.name);
printf("请输入联系人电话:");
scanf("%s", contact.phone);
modify(&list, pos, contact);
break;
}
case 4: {
reverse(&list);
break;
}
case 5: {
char name[20];
printf("请输入要查找的联系人姓名:");
scanf("%s", name);
int pos = search(&list, name);
if (pos == 0) {
printf("未找到该联系人!\n");
} else {
printf("该联系人在电话本中的位置为:%d\n", pos);
}
break;
}
case 6: {
output(&list);
break;
}
case 0: {
printf("程序已退出!\n");
break;
}
default: {
printf("输入有误,请重新输入!\n");
break;
}
}
} while (choice != 0);
return 0;
}
```
这是一个简单的电话本模拟程序,包括电话本的建立、插入、删除、修改、逆置、查找、输出,并设计了一个主菜单完成各个功能的调用。
阅读全文