//线性表的 动态分配顺序 存储结构
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef struct {
Elemtype *elem;
int length;
int listsize;
}
status InitList_Sq(SqList &L)
{
L.elem = (ElemType*)malloc(LIST_INIT_SIZE * sizeof(Elemtype));
if(! L.elem) exit(OVERFLOW);
L.length = 0;
L.listsize = LIST_INIT_SIZE;
return OK;
}
//每个线性表只有一个这样的结构体
//malloc返回的给elem,它是指针的指针,所以不能出现问题。
//线性表插入
status ListInsert_Sq(SqList &L, int i, ElemType e)
{
if(i < 1 || i > L.length + 1) return ERROR;
if(L.length >= L.listsize){
newbase = (ElemType*)remalloc(L.elme, (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;
}
//为什么要用指针作为循环条件呢?这样会比较直观吗。。
//线性表删除
status ListDelete_Sq(Sq_List &L, int i, ElemType &e)
{
if(i < 1 || i > L.length + 1) return ERROR;
p = &(L.elem[i-1 ]);
e = *p;
q = L.elem + L.length - 1;
for(q ++; p <= q; ++p) *(p-1) = *p;
-- L.length;
return OK;
}
2190

被折叠的 条评论
为什么被折叠?



