加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

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

(2018-10-17 19:12:29)
分类: 数据结构(C)
http://s15/bmiddle/006lEeT6zy7otqxLCQSfe&690
//上图为本人所画,基本理解,代码已在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(); 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有