代碼演示:
/**********************************************************
* 順序表的基本操作的實現
***********************************************************/
//創建並初始化爲空表
Status InitList(SqList &L)
{
// TODO (#1#): 創建空表
L.elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!L.elem){exit(ERROR);}
L.length=0;
L.listsize=LIST_INIT_SIZE;
return OK;
//-------------------------------------
}
//銷燬整個表(從此之後不再可用)
Status DestroyList(SqList &L)
{
// TODO (#1#): 銷燬表
L.elem=NULL;
return OK;
//-------------------------------------
}
//將表L置空
Status ClearList(SqList &L)
{
// TODO (#1#): 清空表
L.length=0;
return OK;
//-------------------------------------
}
//判斷表L是否爲空表
bool ListEmpty(SqList L)
{
// TODO (#1#): 順序表判空
if(L.length==0){
return OK;
}
else{
return false;
//-------------------------------------
}
//求表L的長度
int ListLength(SqList L)
{
// TODO (#1#): 求順序表長度
int n=L.length;
return n;
//-------------------------------------
}
//取表L中的第i個元素,並用e返回. 操作成功返回OK,失敗時返回ERROR
Status GetElem(SqList L, int i, ElemType &e)
{
// TODO (#1#): 取元素
if(L.length==0&&i<L.length&&i<0){
return ERROR;
}
e=L.elem[i-1];
return OK;
//-------------------------------------
}
//在表L中定位元素e首次出現的位置. 操作成功返回位序,失敗時返回0
// compare(a,b) 爲比較函數,匹配時返回true,否則返回false
int LocateElem(SqList L, ElemType e, bool (*compare)(ElemType,ElemType))
{
// TODO (#1#): 在表中定位元素e,用compare(a,b)匹配元素
for (int j=0; j<L.length; j++)
if ( compare(L.elem[j],e) ) return j+1;
return 0;
//-------------------------------------
}
//在表L中插入第i個元素e. 操作成功返回OK,失敗時返回ERROR
Status ListInsert(SqList &L, int i, ElemType e)
{
ElemType *newbase;
// TODO (#1#): 在鏈表中插入元素
if(i<1||i>L.length+1){
return ERROR;
}
if(L.length>=L.listsize){
newbase=(ElemType *) realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));
if(!newbase){
exit(ERROR);
}
}
L.elem=newbase;
L.listsize+=LISTINCREMENT;
for(int j=L.length;j>=i;j--){
L.elem[j]=L.elem[j-1];
}
L.elem[i-1]=e;
++L.length;
return OK;
//-------------------------------------
}
//刪除表L中第i個元素,結果用e返回. 操作成功返回OK,失敗時返回ERROR
Status ListDelete(SqList &L, int i, ElemType &e)
{
// TODO (#1#): 在順序表中刪除元素
if(i<1||i>L.length)
{
return ERROR;
}
e=L.elem[i-1];
for(j=i;j<L.length;j++){
L.elem[j-1]=L.elem[j];
}
--L.length;
return OK;
//-------------------------------------
}
//遍歷表L,對每個元素調用visit(x).
Status ListTraverse(SqList L, Status (*visit)(ElemType))
{
// TODO (#1#): 遍歷順序表
for (int j=0; j<L.length; j++)
if ( ! visit(L.elem[j]) ) return ERROR;
return OK;
//-------------------------------------
}