通讯录顺序表实现c语言,数据结构-顺序表(数组)实现简易通讯录

a4c26d1e5885305701be709a3d33442f.png

//上图为本人所画,基本理解,代码已在devc++环境中成功运行,线性表就像排队一样,本人想了很多天才明白,网上代码太多,不利于初学者理解,有问题在下方评论,有时间会回复,共同努力,加油

#include

#include

#include //strcmp函数

#define MAXSIZE 100

typedef struct {

char name[15];

char num[15];

char phone[15];

}Stu;

typedef struct{ //顺序表结构定义

Stu data[MAXSIZE]; //顺序表数据空间数组

int length; //顺序表长度

}SqList;

//初始化

void InitList(SqList *L) {

L->length = 0; //顺序表长初始化为1

printf("初始化完成\n");

}

//录入学生信息

void inputList(SqList *L,int inputNumber){

int j;

if(L->length==0){//如果表长为0,直接从头输入

for(j=0;j

printf("请输入第%d个学生信息\n",j+1);

printf("请输入姓名:");

scanf("%s",L->data[j].name);

printf("请输入学号:");

scanf("%s",L->data[j].num);

printf("请输入手机号:");

scanf("%s",L->data[j].phone);

L->length++;

}

}else{//在有长度的表中添加信息,存储地址需要加上表长,最后把表长加上输入的个数

for(j=0;j

printf("请输入第%d个学生信息\n",j+1);

printf("请输入姓名:");

scanf("%s",L->data[j+L->length].name);

printf("请输入学号:");

scanf("%s",L->data[j+L->length].num);

printf("请输入手机号:");

scanf("%s",L->data[j+L->length].phone);

}

L->length=L->length+inputNumber;

}

printf("恭喜,%d个学生通讯录信息录入成功\n",inputNumber);

}

//插入

int InsertList(SqList *L, int i, Stu e) {

int j;//循环控制变量

if((i<1)||(i>L->length+1)) { //插入位置错误

printf("插入失败,插入位置错误(1到最后一个元素)\n");

return 1;

} else {

if(i==L->length+1) { //在线性表最后一个元素后插入

L->data[L->length] = e;

L->length++;

} else { //在最后一个元素或之前插入,都得后移其他元素

for(j=L->length; j>=i; j--) {

L->data[j]=L->data[j-1];

}

L->data[i-1] = e;

L->length++;

}

}

printf("插入成功\n");

return 0;

}

//删除

int DeleteList(SqList *L, int i) {

int j;//循环控制变量

if((i<1)||(i>L->length)) {

printf("输入删除学生信息位置错误\n");

return 1;

} else {

if(i==L->length) { //删除最后一个元素

L->length--;

printf("恭喜,删除成功\n");

} else {//从前面第一个或其中删除

for(j=i; jlength; j++) {

L->data[j-1]=L->data[j];

}

L->length--;

printf("恭喜,删除成功\n");

}

}

return 0;

}

//查找

int LookUpElem(SqList L,char lookUpName[15]){

int j;

if(L.length==0){

printf("没有信息,无法查找");

}else{

for(j=0;j

if(strcmp(L.data[j].name,lookUpName)==0){

printf("恭喜,在顺序表第%d个元素位置查找到该元素\n",j+1);

printf("姓名:%s ",L.data[j].name);

printf("学号:%s ",L.data[j].num);

printf("手机号:%s\n",L.data[j].phone);

break;

}else{

if(j==L.length-1){

printf("该学生信息不存在\n");

}

}

}

}

return 0;

}

//取值

int GetElem(SqList L,int i){

char reElem[15];

if((i<1)||(i>L.length)){

printf("输入位置错误\n");

return 1;

}else{

printf("第%d个学生是:\n",i);

printf("姓名:%s ",L.data[i-1].name);

printf("学号:%s ",L.data[i-1].num);

printf("手机号:%s\n",L.data[i-1].phone);

}

}

//输出

void ShowList(SqList *L){

int j;//循环控制变量

if(L->length==0){

printf("通讯录内容为空\n");

}else{

printf("通讯录内容为:\n");

for(j=0;jlength;j++){

printf("姓名:%s ",L->data[j].name);

printf("学号:%s ",L->data[j].num);

printf("手机号:%s\n",L->data[j].phone);

}

}

}

//菜单选择函数

void MenuSlect(){

int numberInput; //菜单序号

int insertNumber; //插入元素位置

int deleteNumber; //删除元素位置

Stu inputDate; //插入数据

SqList L; //顺序表

int j; //循环变量

char inputName[15]; //输入查找学生姓名

int getNumber; //查看学生信息位置

int inputInfoNumber;//想录入学生信息的个数

while(1) {

printf("请输入序号:");

scanf("%d",&numberInput);

if((numberInput<1)||(numberInput>8)){

printf("请您输入1-8菜单项");

}else{

switch(numberInput){

case 1: InitList(&L); //初始化

break;

case 2: printf("您想录入多少个学生的通讯录信息?\n");

//录入信息

scanf("%d",&inputInfoNumber);

inputList(&L,inputInfoNumber);

break;

case 3: printf("请输入插入的信息:\n"); //插入

printf("姓名:");

scanf("%s",&inputDate.name);

printf("学号:");

scanf("%s",&inputDate.num);

printf("手机号:");

scanf("%s",&inputDate.phone);

printf("请输入想要插入的位置:");

scanf("%d",&insertNumber);

InsertList(&L, insertNumber,

inputDate);

break;

case 4: printf("请输入要删除学生信息的位置:"); //删除

scanf("%d",&deleteNumber);

DeleteList(&L,deleteNumber);

break;

case 5: printf("请输入要查找的姓名:"); //查找

scanf("%s",&inputName);

LookUpElem(L,inputName);

break;

case 6: printf("请输入要查看第几个学生的信息:");

//取值

scanf("%d",&getNumber);

GetElem(L,getNumber);

break;

case 7: ShowList(&L); //输出通讯录

break;

case 8: exit(0); //程序退出

break;

}

}

}

}

//主函数

int main(){

printf("1.初始化通讯录 2.录入学生信息\n");

printf("3.插入 4.删除\n");

printf("5.查找 6.取学生信息\n");

printf("7.输出通讯录 8.退出程序\n\n");

MenuSlect();

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值