用C语言实现顺序表的基本操作

#define MAXSIZE 100
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int ElemType;
typedef int Status;

typedef struct
{
    ElemType *pList;
    int sqSize;
    int sqLength;
}SqList;

Status InitList(SqList *L);

Status CreateList(SqList *L);

Status PrintList(SqList *L);
Status InsertList(SqList *L,int i,ElemType e);

Status DeleteSqList(SqList *L,int i,ElemType *e);


//初始化一个空的线性表
Status InitList(SqList *L)
{
    L->pList = (SqList *)malloc(sizeof(SqList)); //申请内存空间
    if(L->pList == NULL)
    {
        printf("内存空间分配失败!");
    }
    else
    {
        L->sqLength = 0;
    }

    return OK;

}

//创建顺序表
Status CreateList(SqList *L)
{
    int n,i;
    printf("请输入要输入的数据的个数:");
    scanf("%d",&n);
    if(n>MAXSIZE)
    {
        printf("超出最大容量,请重新输入");
    }
    printf("请输入:");
    for( i=0;i<n;i++)
    {
        scanf("%d",&L->pList[i]);
        L->sqLength++;
    }
    return OK;

}

//输出顺序表
Status PrintList(SqList *L)
{
    int j;
    for(j=0;j<L->sqLength;j++)
    {
        printf("%d ",L->pList[j]);
    }
    printf("\n");
    return OK;
}

//插入元素
Status InsertList(SqList *L,int i,ElemType e)
{
    int index;
    //首先合法性检查
    //是否还有空间可以插入;插入位置是否合法
    if(L->sqLength == L->sqSize || i>L->sqLength )
    {
        return FALSE;
    }

    for(index=L->sqLength-1;index>=i-1;index--)
    {
        L->pList[index+1] = L->pList[index];
    }
    L->pList[i-1] = e;
    L->sqLength++;
    return OK;
}


//删除元素并用e返回

Status DeleteSqList(SqList *L,int i,ElemType *e)
{
    int index;
    //首先检查合法性,顺序表是否为空或者删除位置>顺序表的长度或者小于1
    if(L->sqLength == NULL ||  i<1 || i>L->sqLength)
        return FALSE;
    *e = L->pList[i-1];
    if(i<L->sqLength)
    {
        for(index=i;index<L->sqLength;index++)
        {
            L->pList[index-1] = L->pList[index];
            L->sqLength--;
        }
        return OK;
    }

}

int main()
{
    SqList L ;
    int e;
    InitList(&L);
    CreateList(&L);
    printf("-----原顺序表-----");
    printf("\n");
    PrintList(&L);
    InsertList(&L,3,0);
    printf("-----插入元素后的顺序表为-----");
    printf("\n");
    PrintList(&L);
    DeleteSqList(&L,5,&e);
    printf("-----删除元素后的顺序表为-----");
    printf("\n");
    PrintList(&L);


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值