任务一:用顺序表实现通讯录管理
1、构建如表1所示的顺序表并输出检验,实现表1。
2、增加插入记录的功能并输出检验,实现表2。
3、增加按学号查找的功能并运行验证。
4、增加删除记录的功能并运行验证。
表1
学号 姓名 性别 手机号码 QQ号
2013001 张珊 女 13800001919 34578
表2
2013002 李思 女 13910121978 8796532
2013003 陈琪 女 13789450012 3789123
2013004 王强 男 13634567856 6543783
2013005 赵括 男 13534408976 5679
2013006 刘刚 男 13386543211 98315
注意:用结构化程序设计的方法实现即(其中的)把单一功能设计成一个独立的函数。如构建顺序表设计成一个函数,同样插入、查找、删除、输出也设计成独立的函数。

#include<stdio.h>
#include<stdlib.h>
#include <string.h>
#define list_size 5
#define list_initcrement 10//声明顺序表元素的类型
typedef struct{       char xuehao[14];//学号char name[20];  //姓名int sex;        //性别char tel[14];  //联系电话char qq[12];   //QQ号
}ElemType; typedef struct {ElemType *elem; //存放一个元素或者说一个节点的基地址
int length;
int listsize;
}SeqList; //顺序表的初始化
void  initSeqlist(SeqList &L){char flag; //用来标识是否进行输入 int i,n; //标识当前输入的第几个参数;用来标识要初始化参数的个数 L.elem= (ElemType *)malloc(list_size * sizeof(ElemType) ); L.length=0;L.listsize=list_size; printf("空表初始化完成初");printf("下面请是否对空表进行初始化数据Y/N\n"); scanf("%c",&flag); if(flag=='N'||flag=='n')return;printf("请输入要初始化的参数个数\n"); scanf("%d",&n); if(n>L.listsize){printf("对不起您要输入的参数个数多余我们所初始化的空间了"); return;   }  ElemType *p; p=L.elem; for(i=0;i<n;i++){printf("请输入第%d个数据(学号  姓名  性别(0或1) 联系电话  QQ号):\n",i+1);//每次输入完毕后i+1    scanf("%s%s%d%s%s", p[i].xuehao ,p[i].name , &p[i].sex,  p[i].tel,p[i].qq  );L.length+=1; printf("当前顺序表中参数个数为:");printf("%d\n",L.length); } printf("参数录入完毕\n");
}
//输出顺序表中的元素 int printSeqlist(SeqList &L){if(L.length==0){printf("您的表还是空表,请先进行初始化操作"); return 0; } printf("学号    姓名    性别    联系电话    QQ号\n"); int i;for(i=0;i<=L.length-1;i++){printf("%s\t%s",L.elem[i].xuehao,L.elem[i].name); if(L.elem[i].sex)printf("男"); else printf("女"); printf("\t%s\t%s\n",L.elem[i].tel,L.elem[i].qq) ;           }printf("当前表中元素个数是:");    printf("%d",L.length); printf("还剩下%d个位置:\n",L.listsize-L.length);   return 1; }
//插入数据,向L表中的第i个位置,插入数据元素e
int insertSqelist(SeqList &L,int i,ElemType &e){if(L.length>=L.listsize){printf("表满插入失败");return 0;   } if(i<1||i>L.length+1){printf("插入的位置错误"); return 0;} ElemType *p,*q; //声明一个节点类型q=L.elem+i-1; //获取第i个元素的地址 for(p=L.elem+L.length-1;p>=q;p--){//判断条件里面必须要有等于号,不然的话原先第i的值会被丢弃掉且原先的第i+1为空值 *(p+1)=*p;   } *q=e; //把e的地址赋 L.length++; return 1;
}
//根据学号查找该学生的信息
int  LocateList(SeqList &L,ElemType &e){int i;printf("您要查找的元素信息为:\n");  for(i=0;i<=L.length-1;i++){if(strcmp(L.elem[i].xuehao, e.xuehao)==0){printf("%s\t%s",L.elem[i].xuehao,L.elem[i].name); if(L.elem[i].sex)printf("   男"); else printf("女"); printf("\t%s\t%s\n",L.elem[i].tel,L.elem[i].qq) ;      }   }return 0;
}
int InsetElemType(SeqList &L,ElemType &e){printf("请输入要插入的数据(学号  姓名  性别(0或1) 联系电话  QQ号):\n");scanf("%s%s%d%s%s",e.xuehao,e.name , &e.sex , e.tel  ,e.qq  );printf("学号    姓名    性别    联系电话    QQ号\n");printf("%s\t%s\t",e.xuehao,e.name );                                                               if(e.sex)printf("男");else printf("女");printf("\t%s\t%6s\n",  e.tel  ,e.qq      );printf("请输入你要在那个位置插入这个节点:"); int i;scanf("%d",&i);                                                   insertSqelist(L,i,e);printSeqlist(L);return 1;
}
//按照学生序号进行删除该元素或者说是记录
int DeleteSeqList(SeqList &L,ElemType &e){int i;ElemType *p,*q;for(i=0;i<L.length-1;i++){if(strcmp(L.elem[i].xuehao,e.xuehao)==0){(*p)=L.elem[i];//表示e.xuehao所对应的元素位置 e=*p; q=L.elem+L.length;//尾元素的位置 for(++p;p<=q;++p){   *(p-1)=*p; }  --L.length;//printf("找到了");            }else{printf("没有该学号\n"); return 0; }              }   return 0;
}
int main(){SeqList L; //声明一个顺序表类型; ElemType e; //声明一个节点类型 int  choice;do{printf("     通讯录管理系统\n");printf("======================================\n");printf("               1:退出\n");printf("               2:初始化顺序表\n");printf("               3:插入\n");printf("               4:删除\n");printf("               5:查询\n");printf("               6:输出\n");printf("======================================\n");printf("请选择1-6\n");scanf("%d",&choice); while(choice<1||choice>6){printf("输入错误重新输入"); scanf("%d",&choice); } switch(choice){case 1:exit(1); case 2:initSeqlist(L);break;//初始化顺序表,通过键入记录的方式 case 3:InsetElemType(L,e);break;case 4:printf("请输入要删除记录的学号:\n"); scanf("%s",e.xuehao);printf("要删除的学号为%s\n",e.xuehao); DeleteSeqList(L,e);break;case 5:printf("请输入要查询的学号:\n"); scanf("%s",e.xuehao );printf("要查询的学号为%s\n",e.xuehao); LocateList(L,e);break;case 6:printSeqlist(L);break;} }while(choice); return 0 ;
}

//温馨提示在按学号删除该元素的时候一次只能删除一个,这是因为
//在编写该方法的时候没有考虑一次性多删除,但是可以通过加入While来进行删除。
//因为通过删除(sqeList &L,int i,ElemType &e)方式通过传入元素序号删除比较容易,本文中是通过元素的列或者叫项来进行删除的。
在比较元素项的时候通过比较字符串的方式进行删除,切记不能用==
这是因为字符串比较是不能通过简单的==来进行比较,比较的不是值
而是字符串的地址。

C语言数据结构:链表-顺序表:初始化及操作相关推荐

  1. c语言顺序表所需的头文件,数据结构【顺序表】

    1.线性表定义 线性表是一种线性结构.线性结构的特点是数据元素之间是一种线性关系,数据元素"一个接一个的排列".在一个线性表中数据元素的类型是相同的,或者说线性表是由同一类型的数据 ...

  2. 【数据结构】顺序表的应用(4)(C语言)

    [数据结构]顺序表的应用(1)(C语言) [数据结构]顺序表的应用(2)(C语言) [数据结构]顺序表的应用(3)(C语言) 设计一个算法,将一个顺序表倒置,即如果顺序表各个节点值存储在一维数组a中, ...

  3. 【数据结构】顺序表的应用(3)(C语言)

    问题: 已知一个顺序表中的各节点值是从大到小有序的,设计一个算法,插入一个值为x的节点,使顺序表中的节点仍然是从小到大有序的. 头文件与该头文件一样:[数据结构]顺序表的实现(C语言) #includ ...

  4. 【数据结构】顺序表的应用(2)(C语言)

    问题: 2.有顺序表A和B,其元素均按从小到大的升序排列,编写一个算法,将它们合并成一个顺序表C,要求C的元素也按从小到大的升序排列. 头文件与该头文件一样:[数据结构]顺序表的实现(C语言) #in ...

  5. 【数据结构】顺序表的应用(1)(C语言)

    问题: 1.将顺序表(a1,a2,-,an)重新排列以a1为界的两部分:a1前面的值均比a1小,a1后面的值均比a1大(这里假设数据元素的类型具有可比性,不妨设为整型). 头文件与该头文件一样:[数据 ...

  6. 数据结构C语言实现动态顺序表

    动态顺序表的C语言实现: 正文开始@Assassin 目录: 动态顺序表的C语言实现: ==什么是顺序表?== 1. 定义顺序表结构体: 2. 初始化顺序表: 3. 销毁顺序表: 4. 打印顺序表: ...

  7. 数据结构之顺序表(C语言)

    目录 1.线性表 1.1.线性表的概念: 1.2.线性表数据的存储方式: 注意: 2.顺序表 2.1.概念 2.2.顺序表的存储结构 3.顺序表的各种操作函数实现 3.1.顺序表初始化 3.2.顺序表 ...

  8. 【数据结构】——顺序表介绍(独家介绍,小白必看!!)

    重点和易错点都用彩笔标记出来了,放心食用!! 数据结构分为线性表和非线性表,今天我们要学习的顺序表就是线性表中的一个小类.那么,何为线性表,线性表是指n个具有相同性质的数据元素的有限序列,常见的线性表 ...

  9. 数据结构_顺序表SeqList(C++

    数据结构_SeqList顺序表(C++实现 文章目录 数据结构_SeqList顺序表(C++实现 前言&注意事项 顺序表实现方法 总结 结束 前言&注意事项 有些函数没有修改成员数据的 ...

  10. 数据结构学习笔记:顺序表的删除操作及其演化题目总结

    目录 前言 例题 类似题目1 类似题目2 类似题目3 类似题目4 类似题目5 结语 前言 文章代码皆在Dev-C++ 5.11中测试,主要是总结一些方法,从而总结一些规律使自己进一步地深化学习内容,仅 ...

最新文章

  1. 学习sql注入:猜测数据库_对于SQL的热爱:为什么要学习它以及它将如何帮助您...
  2. react开发教程(十)redux结合react
  3. 网站优化之哪些设置会影响蜘蛛的爬取?
  4. Nginx正则表达式之匹配操作符详解
  5. 终于有人讲透了芯片是什么(电子行业人士必读)
  6. Java模拟双色球彩票
  7. 安装 CocoaPods Alcatraz
  8. System.Windows.Forms.ListView
  9. 将COleDateTime类型数据转换成char *数据
  10. 某台机器上IE8抛“Invalid procedure call or argument”异常
  11. 如何杀死一个已经detached的screen会话?
  12. 解决XP中CPU占用率过高问题, 关了445这个端口(ZT)
  13. 游戏设计规则探秘之宾语
  14. 微型计算机控制是微机原理吗,微型计算机控制技术学习心得
  15. 改led背光有光斑_为什么把车灯改成LED,效果还不如卤素?
  16. 【Books系列】之第四本书:大冰之《你坏》读书笔记
  17. python 导出到excel ,打开excel有错误,错误的提示为:发现“***”中的部分内容问题,是否让我们尽量尝试修复?如果您信任此工作簿的源,请单击“是”。
  18. 光盘或者U盘安装linux操作系统
  19. Lambda表达式超详细总结
  20. 基于Vue和SpringBoot的便利店仓库物资管理系统的设计与实现

热门文章

  1. 基于OpenCV的 桌面手机的尺寸测量
  2. 最简单的rar压缩包文档解密方法,rar压缩包不能复制打印怎么办?
  3. 听说你也想修改IP归属地?
  4. sata7p 定义_SATA接口定义
  5. 检察院批准逮捕洪磊,铁杆分子不买帐
  6. iPhone 如何设置自定义铃声 (更新至iOS13 and macOS Catalina)
  7. QT5.5.0+VS2013(X64)+hidapi的USB继续深究之 QT的汉字显示
  8. python图片转换成文字的手机软件_怎么把手机里的图片转换成WORD?迅捷文字识别帮你解决!...
  9. 内核编译(支持查看cpu温度)
  10. LeetCode #1088. Confusing Number II