在高级语言(如C语言)环境下:数组也具有随机存取的 特性,因此,借助数组来描述顺序表的存储结构。由于线 性表的长度可变,且所需最大存储空间随问题不同而不同, 所以在C语言中可以用动态分配的一维数组来描述。 #define LIST_INIT SIZE100∥线性表存储空间的初始分配量 #define LISTINCREMENT1O∥线性表存储空间的分配增量 typedef struct{ ElemType elem; ∥线性表存储空间基址 int length; 当前线性表长度 int listsize; ∥当前分配的线性表存储空间大小,以 //sizeof(ElemType)为单位) }SqList;
在高级语言(如C语言)环境下:数组也具有随机存取的 特性,因此,借助数组来描述顺序表的存储结构。由于线 性表的长度可变,且所需最大存储空间随问题不同而不同, 所以在C语言中可以用动态分配的一维数组来描述。 #define LIST_INIT_SIZE 100 // 线性表存储空间的初始分配量 #define LISTINCREMENT 10 // 线性表存储空间的分配增量 typedef struct{ ElemType * elem; //线性表存储空间基址 int length; //当前线性表长度 int listsize; //当前分配的线性表存储空间大小,以 //sizeof(ElemType)为单位) }SqList;
在介绍基本操作的算法之前,先回顾本书算法中常用的两C 函数 1)malloc(int size) 功能:在系统内存中分配size个的存储单元,并返 回该空间的基址。 使用方法: int m=100, float *p; p=(float*)malloc(m*sizeof(float)); 执行语句p=(f1oat*)malloc(m*sizeof(f1oat),计 算机将按f1oat类型变量所占空间的大小(一般为32bit) 分配m*sizeof(f1oat)个的存储单元,并将其基址赋值给指 针变量p;
在介绍基本操作的算法之前,先回顾本书算法中常用的两C 函数 1) malloc(int size) 功能:在系统内存中分配size个的存储单元,并返 回该空间的基址。 使用方法: ... int m = 100, float *p; p = (float*) malloc(m*sizeof(float )); 执行语句p = (float*) malloc(m*sizeof(float)),计 算机将按float 类型变量所占空间的大小(一般为32bit) 分配m* sizeof(float)个的存储单元,并将其基址赋值给指 针变量p;
2) free (p) 功能:将指针变量p所指示的存储空间,回收 到系统内存空间中去; 使用方法: 。 int m=100; float *p; p =(float*)malloc(m*sizeof(float)); ∥一旦p所指示的内存空间不再使用 ∥调用free()回收之 free(p);
2) free ( p ) 功能:将指针变量p所指示的存储空间,回收 到系统内存空间中去; 使用方法: ... int m = 100; float *p; p = (float*)malloc(m*sizeof(float)); // 一旦p所指示的内存空间不再使用 //调用free( ) 回收之 free(p);
2.2.2 顺序表的基本操作 顺序存储结构中,很容易实现线性表的一些操 作:如随机存取第个数据元素等。特别注意的是, C语言中数组的下标是从0开始的,因此,若L是 SqList类型的顺序表,则表中第i个数据元素是 L.elem[i-1]。有关顺序表的操作有初始化、赋值、 查找、修改、插入、删除、求长度等。 以下将对几种主要的操作进行讨论
2.2.2 顺序表的基本操作 顺序存储结构中,很容易实现线性表的一些操 作:如随机存取第i个数据元素等。特别注意的是, C语言中数组的下标是从0开始的,因此,若L是 SqList类型的顺序表,则表中第i个数据元素是 L.elem[i-1]。有关顺序表的操作有初始化、赋值、 查找、修改、插入、删除、求长度等。 以下将对几种主要的操作进行讨论
1 线性表的初始化操作 void InitList SqList &L,int maxsize )2.3 /构造一个空的线性表工 L.elem= (ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType)); if(!L.elem)exit(OVERFLOW);/存储分配失败 L.length=0;//空表长度为0 L.listsize-=LIST_INIT SIZE;//初始存储容量 Return OK; }//InitList_Sq
1 线性表的初始化操作 void InitList ( SqList &L, int maxsize ){//算法2.3 //构造一个空的线性表L L.elem= (ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType)); if (! L.elem) exit(OVERFLOW); //存储分配失败 L. length=0; //空表长度为0 L.listsize=LIST_INIT_SIZE; //初始存储容量 Return OK; }//InitList_Sq