顺序表的相关函数

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>///动态存储分配
#define LIST_INIT_SIZE 100
typedef int ElemType;
typedef struct SqList{
ElemType *base;
int capacity;///存储空间容量
int size;///有效元素个数
}SquList;

int InitList(SqList &L){
    L.base=(ElemType* )malloc(LIST_INIT_SIZE*sizeof(ElemType));
    if(L.base==NULL)exit(-1);
    L.capacity=LIST_INIT_SIZE;
    L.size=0;
    return 1;
}
///顺序表的销毁
int DestoryList(SqList &L){
    if(L.base==NULL)return 0;
    free(L.base);
    L.base=NULL;
    L.size=0;
    return 1;
}
///顺序表的清空
int ClearList(SqList &L){
    if(L.base==NULL)return 0;
    else{
    L.size=0;
    return 1;
    }
}
///顺序表的插入
int InsertList(SqList &L,int i,ElemType e){///这里的i是指第i个元素,而不是下标
    if(i<1||i>L.size+1)return 0;
    if(L.size>=L.capacity){
        ///若插入前表满,则将表的容量扩大为原本容量的二倍
        L.base=(ElemType*)realloc(L.base,2*L.capacity*sizeof(ElemType));
        if(L.base==NULL)exit(-1);
        L.capacity*=2;
    }
    for(int k=L.size-1;k>=i-1;k--)///第i个元素,下表是i-1
        L.base[k+1]=L.base[k];///将插入位置及其往后原所有元素往后移一格
        L.base[i-1]=e;
        L.size++;
        return 1;
    }

///顺序表的删除
int EraseList(SqList &L,int i,ElemType &e){///这里的i是指第i个元素,而不是下标
if(i<1||i>L.size)return 0;
e=L.base[i-1];
for(int k=i;k<L.size;k++)///被删除元素后的所有元素前移一位
L.base[k-1]=L.base[k];
L.size--;
return 1;
} 
///顺序表的查找
int FindList(SqList L,ElemType e){
    int result=0;
    for(int i=0;i<=L.size-1;i++){
        if(L.base[i]==e){
            return i+1;///返回是第几个元素
            break;
        }
    }
    return result;///没找到
}
///是顺序表的的遍历输出
int PrintElem( ElemType e){
    printf("%d",e);
    return 1;
}
int ListTraverse(SqList L,int(*visit)(ElemType)){///visit是函数指针,指向一个接受Elemtype类型参数并返回int类型值的函数,
                                                 ///visit存储了函数PrintElem的首地址,可通过visit调用PrintElem函数
    int flag;
    for(int i=0;i<L.size;i++){
        ///遍历L中的每个元素,调用visit函数
        flag=visit(L.base[i]);///若visit函数返回0,则遍历结束.
        if(flag!=1)return 0;
    }///所有元素处理完返回1;
    return 1;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值