线性表
1、预定义状态码
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
2、预定义常量
#define LIST_INIT_SIZE 100 //线性表容量
#define LISTINCREMENT 10
3、定义线性表结构体
typedef struct /*定义线性表结构体*/
{
ElemType * elem;
int length;
int listsize;
}SqList;
4、malloc()函数的使用
调用malloc()函数申请一块连续的、指定大小的内存空间,并返回该内存空间的首地址,即一个空类型的指针变量。故使用该函数时需对返回的指针类型进行强制转换。例:p=(int *)malloc(sizeof(int))。
5、增加一个空的线性表
Status initList_Sq(SqList *L) /*增加一个空的线性表*/
{
L->elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType));
L->length = 0; /*空表长度为0*/
L->listsize = LIST_INIT_SIZE; /*初始存储容量*/
return OK;
}
6.1、按下标查找,返回值
ElemType GetELem(SqList *L,int i) /*查找该线性表里的第i个元素*/
{
ElemType e;
e = L->elem[i-1]; /*T(n) = O(1)*/
return e;
}
6.2、按值查找,返回下标
int GetElem(SqList L,ElemType value) /*传入一个值,匹配线性表里的元素,若匹配成功则返回下标i*/
{
int i;
for(i=0;i<L.length;i++)
if(L.elem[i]==value)
return i;
return INFEASIBLE;
}
7、插入元素
Status ListInsert_Sq(SqList *L,int i,ElemType e)
{
ElemType *newbase,*q,*p;
if(i<1||i>L->length+1) return errno;
if(L->length>=L->listsize)
{
newbase = (ElemType *)realloc(L->elem,(L->listsize+LISTINCREMENT)*sizeof(ElemType));
if(!newbase) exit(OVERFLOW);
L->elem = newbase;
L->listsize += LISTINCREMENT;
}
q = &(L->elem[i-1]);
for(p = &(L->elem[L->length-1]);p >= q;--p)
*(p+1) = *p;
*q = e;
L->length++;
return OK;
}