《顺序存储结构线性表基本操作纯C语言实现》由会员分享,可在线阅读,更多相关《顺序存储结构线性表基本操作纯C语言实现(8页珍藏版)》请在金锄头文库上搜索。
1、/ 顺序存储结构线性表基本操作 纯 C 语言实现/a simple example of Sq_List by C language/by wangweinoo1PG/#include #include / 以下为函数运行结果状态代码#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2#define LIST_INIT_SIZE 5#define LISTINCREMENT 1/ 线性表存储空间的初始分配量/ 线性表存储空间分配增量typedefintSt
2、atus ;/ 函数类型,其值为为函数结果状态代码typedefintElemTypeJ/ 假设数据元素为整型typedef structElemType*elemJ/存储空间基址intlength; /当前长度intlistsize ;/当前分配的存储容量Sqlist ;/ 实现线性表的顺序存储结构的类型定义staticSqlist L; / 为了引用方便,定义为全局变量staticElemType element ;/ 函数名: InitList()/ 参数: SqList L/ 初始条件:无/ 功能:构造一个空线性表/ 返回值:存储分配失败: OVERFLOW/ 存储分配成功: OK/S
3、tatus InitList ( Sqlist L)( ElemType );L.elem= ( ElemType* ) malloc ( LIST_INIT_SIZE* sizeof if ( L.elem=NULL )exit ( OVERFLOW);elseL.length= 0;L.listsize=LISTINCREMENT ;return OK;/ 函数名: DestroyList()/ 参数: SqList L/ 初始条件:线性表 L 已存在/ 功能:销毁线性表/ 返回值: L.elem=NULL:ERROR/ L.elem!=NULL:OK/Status DestroyList
4、 ( Sqlist L) if ( L.elem=NULL )return ERROR;elsefree ( L.elem );return OK;/ 函数名: ClearList()/ 参数: SqList L/ 初始条件:线性表 L 已存在/ 功能:清空线性表/ 返回值: L.elem=NULL:ERROR/ L.elem!=NULL:OK/Status ClearList ( Sqlist L)if ( L.elem=NULL ) exit ( ERROR);int i ;ElemType *p_elem=L.elemfor( i= 0; iL.length; i+ )*L.elem=N
5、ULL ;L.elem+ ;L.elem=p_elem ; return OK;/ 函数名: ListEmpty()/ 参数: SqList L/ 初始条件:线性表 L 已存在/ 功能:判断线性表是否为空/ 返回值:空: TRUE/ 非空: FALSE/Status ListEmpty ( Sqlist L) int i ;ElemType *p_elem=L.elemfor ( i= 0; iL.length ; i+ ) if ( *L.elem!= 0)L.elem=p_elem ; return FALSE ;L.elem+ ;return TRUE;/ 函数名: ListLength
6、()/ 参数: SqList L/ 初始条件:线性表 L 已存在/ 功能:返回线性表长度/ 返回值:线性表长度 (L.length)/ int ListLength ( Sqlist L) return L.length ;/ 函数名: GetElem()/ 参数: SqList L,int i,ElemType *element/ 初始条件:线性表 L 已存在, 1=i=ListLength(L)/ 功能:用 e 返回线性表中第 i 个元素的值/ 返回值: (iListLength(L) : OVERFLOW/ 1=i=ListLength(L) : OK /Status GetElem (
7、 Sqlist L, int i )int j ;ElemType *p_elem=L.elem ;if ( iL.length )return OVERFLOW;for ( j= 1; j=i ; j+ )L.elem+ ;element=*L.elem ;L.elem=p_elem ;return OK;/ 函数名: LocateElem()/ 参数: Sqlist L,ElemType element/ 初始条件:线性表 L 已存在/ 功能:返回顺序表 L 中第 1 个与 element 相等的元素/ 返回值:若在 L 中存在于 element 相等的元素:其位序 / 若在 L 中不存在
8、与 element 相等的元素: 0 /int LocationElem ( Sqlist L,ElemType element ) int i ;ElemType *p_elem=L.elem ;for ( i= 1; i1&i=L.length, LocationElem()/ 功能:用 pre_e 返回线性表中 cur_e 的前驱/ 返回值: iL.length : OVERFLOW/ i1&i=L.length: OK/Status PriorElem ( SqlistL,ElemType cur_e,ElemType*pre_ElemType *p_elem=L.elem int i
9、,j i=LocationElem ( L,cur_e ); if ( iL.length ) exit ( OVERFLOW);for ( j= 1; j=1&iL.length , LocationElem()/ 功能:用 next_e 返回线性表中 cur_e 的后继/ 返回值: i=L.length: OVERFLOW/ i=1&iL.length : OK/*next_eStatus NextElem ( SqlistL,ElemType cur_e,ElemTypeElemType *p_elem ;int i,j ;i=LocationElem ( L,cur_e ); if (
10、 i=L.length ) exit ( OVERFLOW);for ( j= 1; ji ; j+ )if ( j= ( i- 1)next_e=L.elem ; L.elem=p_elem ; return OK;elseL.elem+ ;/ 函数名: ListInsert()/ 参数: SqList L,int i,ElemType e/ 初始条件:线性表 L 已存在, 1=i=ListLength(L)+1/ 功能:在线性表中第 i 个数据元素之前插入数据元素 e/ 返回值:失败: ERROR/ 成功: OK /Status ListInsert ( Sqlist L, int i,ElemType e)int *q=& ( L.elemi- 1);ElemType *newbase,* p;if ( i