一、 回顾上篇所讲
顺序表:
两个文件 .h和.c
.h文件有所需的标准库的头文件
定义动态顺序表的结构体——三个成员
1.指针,指针的类型重定义,方便类型替换
2.有效数据的个数
3.空间大小
在增删查改之前要比较size(有效数据的个数)和capacity(空间大小) 的大小关系
动态申请的空间,一定要销毁掉
二、连接上篇再讲一个顺序表的知识点
2.1特定位置之前插入
注意:size的概念,他是有效数据的下一个位置(注意是下一个,不是最后一个有效数据)
size在3后面一个,不是在3那里
pos及以后的数据向后移动一位
2.2特定位置删除数据
pos处的数据删除后,后面的数据向前移动一位
注意:先移动3,在移动4,依次向后移动元素
2.3顺序表的查找
逻辑还是挺简单的
到现在为止顺序表的所有代码都介绍完了
三、基于顺序表实现通讯录
顺序表可以存储的数据类型:int、char、自定义类型,比如结构体
seqlist.h的文件里要包含contact.h,但是contact.h也要包含seqlist.h,这样就矛盾了,头文件是不能交叉包含的,所以需要前置声明
3.1通讯录的用法
注意:头文件是不能交叉包含的
所以在第一张代码,没有写成typedef struct peoinfo,是因为提前包含了通讯录的头文件
第二张,必须写成typedef struct seqlist contact ,就是因为不能交叉包含,所以必须前置声明
再次明确一个概念:
关于scanf的语法,第一个参数是占位符,第二个参数是地址,所以对于普通变量,是一定要有取地址符来获取地址的,但是第二个参数是数组名时就不用取地址符了,因为数组名就是首元素的地址
删除联系人数据
找到下标就等价于特定位置删除
3.2展示通讯录的数据
效果展示
但是联系人的数据并没有和表头对齐
可以利用制表符或者占位符,左对齐或是右对齐
占位符的写法
占位符前加数字,表示宽度
制表符写法就是在打印前面加上制表符 \t
通讯录所有功能全部实现