线性顺序表

 一维数组

#define MAX_SIZE 100
typedef int ElemType;
typedef struct sqlist{
	ElemType data[MAX_SIZE];//静态数组是不需要进行内存分配
	int length;
	int size;
}SqList;
void Init_SqList(SqList *L){   //初始化
	L->data=(ElemType*)malloc(MAX_SIZE*sizeof(ElemType));
	L->length = 0;
}

一维数组可以是静态分配的,也可以是动态分配的。在静态分配时,由于数组的大小和空间事先已经固定好,一旦空间占满,再加入新的数据将会产生溢出,进而导致程序奔溃甚至引起其他未知异常。

 

而在动态分配时,存储数组的空间是在程序执行过程中通过动态存储分配语句分配的,一旦存储空间占满,就另外开辟一块更大的存储区间,将原来的元素复制过去,从而达到扩充存储数组空间的目的,而不需要一次性分配很大的空间。

C语言的初始动态分配语句为:L.data = (ElemType*)malloc(sizeof(ElemType)*InitSize); 

typedef int ElemType;
typedef struct sqlist{
	ElemType *data;  //动态数组

	int length;
	int size;
}SqList;
void Init_SqList(SqList *L){
	L->data=(ElemType*)malloc(MAX_SIZE*sizeof(ElemType));//动态数组是需要进行内存分配
	L->length = 0;
}

变量L的定义

SqList L 

某被调函数不需要对原结构体中的 data 和 length 进行修改时,形参就使用SqList L

 可通过L.data[i]访问顺序表种序号位i-1的元素

对顺序表的取值操作

#define MAXSIZE 20          
typedef int ElemType;      
typedef struct
{
    ElemType data[MAXSIZE]; 
    int length;             
}SqList;
//被调函数
Status GetElem(SqList L,int i,ElemType *e){	
//此函数没有对L中的data或length作出改动,使用普通类型L,无需"回传"给主调函数变化后值,因为没有改变
//此函数对e作出了改动,需要"回传"给主调函数,所以使用指针类型*e
    if(L.length==0 || i<1 || i>L.length)
            return ERROR;
    //对e进行了改动(初始化了e)
    //解引用 e 以存储数据
    *e=L.data[i-1];

    return OK;
}
//主调函数
int main(){
	...
	SqList L;
	ElemType e;
	GetElem(L,5,&e);	//&e将变量e的存储地址传给被调函数的指针变量*e来保存,从而获取到被调函数改动后的e的值
	printf("第5个元素的值为:%d\n",e);	//这里e为改动后的值("回传"的新e)
	...
	return 0;
}

SqList *L

某函数需要对原结构体中的 data 和 length 进行修改时,形参就使用SqList *L

  可通过L->data[i]访问顺序表种序号位i-1的元素

对顺序表的初始化操作

Status InitList(SqList *L){  //此函数对形参作出了改动,将更改后的数据"回传"给主调函数的实参
//也可以在C++中使用&引用 Status InitList(SqList &L)

	//修改了结构体中的length,需要"回传",因为主调函数后面需要输出L.length
    L->length=0;	//等价于 (*L).length=0 解引用L获得其对应的存储内容
    return OK;
}

int main(){
	...
	SqList L;
    Status i;
    //可以在C++中使用 i=InitList(T);
    i=InitList(&L);	
    //&L:获得L的存储地址,将此存储地址传给被调函数中的指针变量*L,从而获取到被调函数改动后的L(所以可以理解为"回传")
    printf("初始化L后:L.length=%d\n",L.length); //这里L为改动后的值
    ...
    return 0;
}

你可能感兴趣的:(算法,数据结构)