求一个C语言实现顺序表

求一个C语言实现顺序表,要有注释的,谢谢🙏

这是我之前学习时,写的,可以看看。有不懂可以问



#include <stdio.h>
#include "stdlib.h"


/*预定义常量和类型*/
/*函数结果状态码*/
#define     TRUE    1
#define     FALSE   0
#define     OK      1
#define     ERROR       0
#define     INFEASIBLE  -1
#define     OVERFLOW    -2

/*Status 是函数的类型,其值是函数结果状态代码*/
    
typedef int Status;
typedef char ElemType;  //单个元素类型

#define     MAXSIZE     100

typedef struct 
{
    ElemType *elem; // 数组指针elem指示顺序表的基地址
    int length;
}SqList;   //结构体类型名 : SqList

/*1、构造一个空的顺序表L*/  
Status InitList_Sq(SqList *L)     //结构体指针变量作为形参 
{     
    //L.elem=new ElemType[MAXSIZE];   //为顺序表分配空间
    (*L).elem =(ElemType *)malloc(sizeof(ElemType)*MAXSIZE); //(*L).elem = L->elem
    if(!L->elem) exit(OVERFLOW);     //异常处理,存储分配失败
    L->length=0;                     //空表长度为0
    return OK; //OK=1
}

/*2、销毁线性表L */
void DestroyList(SqList *L) 
{
    if (L->elem)
    {
        free(L->elem); //释放存储空间
    }          
}

/*3、清空线性表L*/
void ClearList(SqList *L) 
{
    L->length=0; //将线性表的长度置为0
}

/*4、求线性表L的长度*/
int GetLength(SqList *L)
{
    return (L->length); //
}

/*5、判断线性表L是否为空*/
int IsEmpty(SqList *L)
{
    if (L->length==0) 
        return 1;
    else 
        return 0;
}
/*6、顺序表的取值(根据位置i 获取相应位置数据元素的内容)*/
int GetElem(SqList *L,int i,ElemType *e)
{
    if (i<1 || i> L->length)
    return ERROR;          //判断i值是否合理,若不合理,返回ERROR
    *e=L->elem[i-1];     //第i-1 的单元存储着第i个数据
    return OK;
}
/*7、顺序表的查找*/
int LocateELem(SqList *L,ElemType e)
{
    int i;
    //在线性表L中查找值为e的数据元素,返回其序号(是第几个元素)
    for (i=0; i< L->length;i++)
        if (L->elem[i]==e) 
        return i+1; //查找成功,返回序号
    return 0; //查找失败,返回0
}
  
/*8、顺序表的插入*/
Status ListInsert_Sq(SqList *L,int i ,ElemType e)
{
    int j;
    if(i<1 || i>L->length+1) return ERROR;             //i值不合法
    if(L->length==MAXSIZE) return ERROR;    //当前存储空间已满     
    for(j=L->length-1;j>=i-1;j--) 
       L->elem[j+1]=L->elem[j];    //插入位置及之后的元素后移
    L->elem[i-1]=e;                     //将新元素e放入第i个位置
    L->length ++;                 //表长增1
    return OK;
}

/*9、顺序表元素的删除*/
Status ListDelete_Sq(SqList *L,int Del_Loc)
{
    int j;
    if((Del_Loc < 1)||(Del_Loc > L->length)) return ERROR;     //i值不合法
    for (j= Del_Loc; j <= L->length-1; j++)                   
        L->elem[j-1] = L->elem[j];       //被删除元素之后的元素前移  
    --L->length;                         //表长减1
    return OK;
}
void ListInput(SqList *L, int n) //顺序表数据的输入
{
    int i = 0;
    L->length = n;
    //printf("L->length =%d",L->length);
    for(i=0;i < n;i++)
    {
        scanf("%d",&L->elem[i]);
    }
    
}

void PrintSqList(SqList *L)   //顺序表的元素输出
{
    int i;
    for(i=0;i < L->length;i++)
    {
        printf("%d ",L->elem[i]);
    }
    putchar('\n');
}
/***************************************************/
int main(int argc, char const *argv[])
{
    int length;  //顺序表的长度    
    int i;
    SqList L1;                // 声明了结构体变量L 
    if (InitList_Sq(&L1))    // 结构体变量地址作为实参 
        printf("0 初始化顺序表成功!!!\n");
    printf("1 请输入顺序表的长度:");
    scanf("%d",&length);
    
    printf("2 请输入数据:");
    ListInput(&L1, length);  //顺序表数据的输入
    
    printf("3 顺序表L1为:");
    PrintSqList(&L1);
    
    /*4、求线性表L的长度*/
    printf("4 L1.length = %d\n",GetLength(&L1));
    
    /*5、判断线性表L是否为空*/
    printf("5 断线性表L1是否为空 %d\n",IsEmpty(&L1));
    
    /*6、顺序表的取值(根据位置i 获取相应位置数据元素的内容)*/
    ElemType a,*e=&a;
    GetElem(&L1,2,e);
    printf("6 L1的第2个元素是:%d\n",*e);
    
    /*7、顺序表的查找*/
    printf("7 3是在L1中的位置:%d\n",LocateELem(&L1,3));

    return 0;
}

你可以参考如下链接:


如果对你有帮助,可以给我个采纳吗,谢谢!! 点击我这个回答右上方的【采纳】按钮