动态分配顺序表
Status InitList(SQList &L);
void DestoryList(SQList &L);
void ClearList(SQList &L);
bool Empty(SQList L);
Status Length(SQList L);
Status LocateElem(SQList L, ElemType e);
Status GetElem(SQList L, int id);
bool ListInsert(SQList &L, int id, ElemType e);
bool ListDelete(SQList &L, int id, ElemType &e);
void PrintList(SQList L);
顺序表定义
typedef int Status;
typedef int ElemType;
const int MAXSIZE = 100;
typedef struct {
ElemType *data;
int length;
int listsize;
} SQList;
初始化顺序表
Status InitList(SQList &L)
{
L.data = (ElemType *)malloc(MAXSIZE * sizeof(ElemType));
if (!L.data)
exit(_OVERFLOW);
L.length = 0;
L.listsize = MAXSIZE;
return true;
}
摧毁顺序表
void DestoryList(SQList &L)
{
free(L.data);
L.length = 0;
L.listsize = 0;
}
清空顺序表
void ClearList(SQList &L)
{
memset(L.data, 0, sizeof(L.data));
L.length = 0;
L.listsize = 0;
}
判断表是否为空
bool Empty(SQList L)
{
if (L.length)
return false;
else
return true;
}
求表长
Status Length(SQList L)
{
return L.length;
}
按值查找元素
Status LocateElem(SQList L, ElemType e)
{
for (int i = 0; i < L.length; i++)
if (L.data[i] == e)
return i + 1;
return 0;
}
按位查找元素
Status GetElem(SQList L, int id)
{
if (id < 1 || id > L.length || Empty(L))
return false;
return L.data[id - 1];
}
插入节点
bool ListInsert(SQList &L, int id, ElemType e)
{
if (id < 1 || id > L.length)
return false;
if (L.length >= L.listsize) {
ElemType *newbase = (ElemType *)realloc(L.data, (L.length + MAXSIZE) * sizeof(ElemType));
if (!newbase)
return false;
L.listsize += MAXSIZE;
}
for (int i = L.length; i >= id; i--)
L.data[i] = L.data[i - 1];
L.data[id] = e;
L.length++;
return true;
}
删除节点
bool ListDelete(SQList &L, int id, ElemType &e)
{
if (id < 1 || id > L.length)
return false;
e = L.data[id - 1];
for (int i = id; i < L.length; i++)
L.data[i - 1] = L.data[i];
L.length--;
return true;
}
输出顺序表
void PrintList(SQList L)
{
if (L.length < 1)
return;
printf("SQList L: %d", L.data[0]);
for (int i = 0; i < L.length; i++)
printf(" %d", L.data[i]);
printf("\n");
}