您的位置:首页 > 其它

线性表的顺序存储结构的基本操作

2017-09-17 11:12 260 查看

代码演示:

/**********************************************************
*  顺序表的基本操作的实现
***********************************************************/
//创建并初始化为空表
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;
//-------------------------------------
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  线性表 存储 结构