数据结构分析站(C/C++)
(会和大家不定时分享一些数据结构的基础性知识,会保证至少一周一更,喜欢的请大家关注一下,欢迎大家留言。)
承接上文,直接开始讲这两种表Let’s go.
还是老样子,在这两种表(顺序表链表)之前说一下线性表。
线性表定义:具有相同数据元素的一个有序序列
线性表的性质:
(1)有穷性:线性表中元素个数有限(线性表所含元素个数叫做线性表的长度)
(2)一致性:线性表中的所有元素具有相同的数据类型
(3)序列性:线性表中所有元素的相对位置是线性的,有唯一的开始元素和终端元素。(元素在线性表的位置取决于他们的序号,因而一个线性表中可以存在两个值相同的元素)
何为顺序表:
线性表定义:把线性表中的所有元素按照他的逻辑顺序依次存储到指定的连续的存储空间中。通俗来说,就是线性表的顺序存储结构叫做顺序表。
可以把顺序表看作一个一维数组进行理解,线性表的逻辑序号是从1开始的,对应的顺序表的数组是从下标0开始的,在这里一定注意区分
在下文大家会看到一个符号为ElemType,这个符号表示一个数据类型。
// 把ElemType定义为int类型
typedef int ElemType;
顺序表的提供:
1、通过顺序表指针L间接的提供顺序表,定义方式为 SqList *L;在引用length域的时候L->length;
2、还可以通过顺序表Q提供,此时没有指针,单纯的数据操作,引用length域时Q.length.
一、创建顺序表:由元素a[0…n-1]创建顺序表L,把数组a中的每个元素依次放入顺序表,n就是顺序表的长度。其中的L是顺序表指针,是输出型参数,所以在形参L的前面需要加上引用符’&‘。
// 建立顺序表
void CreateList(SqList * & L,ElemType a[],int n)
{
int i=0,k=0; //i要用到循环里,,,k表示L中元素的个数,随着循环增长而增长,初始为0
L=(SqList *)malloc(sizeof(SqList)); //分配存放线性表的空间,属于固定形式
while(i<n)
{
L->data[k]=a[i]; //把a内的元素都放入L中
k++;
i++;
}
L->length=k; //把L的长度定为k
}