SkylerChoice
2021-10-03 20:29
采纳率: 100%
浏览 39
已结题

求一个C语言实现顺序表

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

  • 好问题 提建议
  • 收藏

2条回答 默认 最新

  • yangbocsu 2021-10-03 20:32
    已采纳

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

    
    
    #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;
    }
    
    已采纳该答案
    评论
    解决 1 无用
    打赏 举报

相关推荐 更多相似问题