C语言实现顺序存储结构
本实验基于数据结构中的线性表,使用顺序存储结构。实现C语言的通讯表。
代码如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define maxsize 20//定义最大容量//有什么需要帮助可以加企鹅号:2758566124//使用线性表的顺序存储--实现通讯录
typedef struct//定义数据类型
{int id;char name[20];int phone;
}Data;typedef struct//定义顺序表
{Data* elem;//初始地址int length;
}SqList;int initList(SqList* L)
{L->elem = (Data*)malloc(maxsize);//动态创建if (!L->elem){printf("创建失败\n");return -1;}L->length = 0;//表的长度return 0;
}int ListInsert(SqList* L)
{if (L->length == maxsize){printf("空间已满\n");return -1;}printf("id:");scanf("%d", &L->elem[L->length].id);//使用length来当数组下标printf("name:");scanf("%s", L->elem[L->length].name);//name是字符数组不需要取地址符printf("phone:");scanf("%d", &L->elem[L->length].phone);L->length++;return 0;
}int deleteList(SqList* L)
{if (L->length == 0){printf("没有人员可以删除\n");return -1;}printf("请输入你想删除的名字:");char name[20];scanf("%s", name);for (int i = 0; i < L->length; i++){if (strcmp(name, L->elem[i].name) == 0)//字符串的比较{for (int j=i;j<L->length-1;j++){L->elem[j].id = L->elem[j + 1].id;L->elem[j].phone = L->elem[j + 1].phone;strcpy(L->elem[j].name, L->elem[j + 1].name);}printf("删除成功\n");L->length--;return 0;}}printf("删除失败\n");return 0;
}int SeekList(SqList* L)
{printf("请输入你想查找的名字:");char name[20];scanf("%s", name);for (int i = 0; i < L->length; i++){if (strcmp(name, L->elem[i].name) == 0)//字符串的比较{printf("%s的电话为:%d\n", L->elem[i].name,L->elem[i].phone);return 0;}}printf("未找到该人\n");return 0;
}int printList(SqList* L)
{if (L->length == 0){printf("没有元素\n");return 0;}for (int i = 0; i < L->length; i++){printf("id:%d\t",L->elem[i].id);printf("name:%s\t", L->elem[i].name);printf("phone:%d\n", L->elem[i].phone);}return 0;
}void menu()
{printf("1.添加人员信息\n");printf("2.删除人员信息\n");printf("3.查找人员信息\n");printf("4.显示所有人员信息\n");printf("5.退出\n");
}int main()
{SqList L;//定义顺序表initList(&L);//初始化顺序表while (1){menu();printf("请输入你的选择:");int chose;scanf("%d", &chose);switch(chose){case 1:ListInsert(& L);break;case 2:deleteList(&L);break;case 3:SeekList(&L);break;case 4:printList(&L);break;default:printf("输入错误,重新输入\n");break;}}return 0;
}