今天呢,我来说一说顺序存储结构的,查找,插入,删除操作。
首先我们先回顾一下昨天的顺序存储结构的结构体的定义
#define MaxSize 100 typedef struct { int data[MaxSize]; int Length; }Sqlist;
1.查找算法(在顺序表中查找第一个值等于e的元素)
其实看过上一个博客的我们都知道,顺序表可以理解为就是数组,那数组中怎么查找呢?
不就是用数组的下标嘛!
硬货来了哈!
#define Status int Status findElem(Sqlist L, int e) { int i; for(i=0;i<L.Length;++i) { if(e==L.data[i]) { return i; //若找到返回下标 } } return -1; //没有找到,返回-1,表示无 }
接下来我给小萌新们讲解讲解,你们的第一个疑惑点,很多时候你们一上来看到的是这个
Status findElem(Sqlist L, int e);
有的同学就迷惑了,Status 是什么 对不对,而且书上是没有这句的 #define Status int,所以加上了之后是不是就大概懂了
是什么意思呢,实际上你可以理解为Status 就是函数的返回类型,我在上面定义为 int类型,其实还可以是是void,cahr,等等。
第二个疑惑点(不如称为注意点)
for(i=0;i<L.Length;++i) 和 for(i=0;i<L.Length;i++) 二者的区别大家能分清吗?
++i:先自增在引用,什么意思呢,在第for循环中,第一次判断的时候i=1,不再是0,(因为++i,先自增,再把值传给函数引用)
i++:先引用再自增,所以在第一次循环判断的时候i=0;第二次i才等于1;
那接下来就是萌新们的第三个疑惑点,数组的下标不是从0开始的嘛,让i先自增再引用,取不到第一个数组元素啊
所以这个大家要转换一下自己的思维,C语言的下标是0开始的,但是数据结构是军师级别的东西,所以第一个元素就是第一个
,与就是说数据结构里的下标是从1开始的,又到了 No pic say a J8 环节了!
for(i=0;i<L.Length;++i) //大家有没有发现其实i是有范围的 //1<=i<=Lentg { //也就是说现在数组中有5个元素,你不能取查找第99个元素,你也不能取查找第-1个元素 //那都是没有意义的 if(e==L.data[i-1]) //这里就是循环查找 { //当e=data[i-1]时就返回那个位置i return i; } }
啊,说了半天才说了一个 查找操作啊。
插入和删除只能时下此讲解咯!