美文网首页程序员
线性表的顺序存储结构(查找、插入、删除等)

线性表的顺序存储结构(查找、插入、删除等)

作者: _常小仙儿 | 来源:发表于2016-05-15 19:32 被阅读1588次
    
    #include <stdio.h>
    #include <stdlib.h>
    #define LIST_INIT_SIZE 100//线性表存储空间的初始化分配量
    #define LISTINCREMENT 10//线性表存储空间的分配增量(当存储空间不够时要用到)
    typedef int ElemType;
    struct List
    {
        ElemType *elem;//存储空间的基地址
        int length;//当前线性表的长度
        int listsize;//当前分配的存储容量
    };
    int InitList(struct List *L)
    {
        L->elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType));//开辟一个存储空间,并把这块存储空间的基地址赋值给elem
        if(!L->elem)
        {
            return -1;//空间分配失败
        }
        L->length = 10;//当前长度
        L->listsize = LIST_INIT_SIZE;//当前分配量
        return 0;
    }
    /*
    *   插入操作
    */
    int ListInsert(struct List *L,int i,ElemType e)
    {
        //判断i是否在范围内
        if (i<1 || i>L->length + 1)return -1;
        
        //判断存储空间是否够用
        if(L->length >= L->listsize){
            return -1;
        }
        //插入操作
        if (i<=L->length) {
            for (int k=L->length-1; k>=i-1; k--) {
                L->elem[k+1] = L->elem[k];
            }
        }
        L->elem[i-1] = e;
    
        L->length ++;
        
        return 0;
    }
    /**
     *  初始化数据
     */
    void ListInit(struct List *L)
    {
        printf("please input data\n");
        int x=1;
        for (int i = 0; i<L->length; i++) {
            L->elem[i] = x;
            x*=2;
        }
    }
    int ListDelete(struct List *L,int i,ElemType *e)
    {
        //判断删除位置合法
        if (i<1||i>L->length) {
            return -1;
        }
        if (L->length ==0) {
            return -1;
        }
        //取出删除元素
        *e = L->elem[i-1];
        for (int j = i;j<L->length;j++) {
            L->elem[j-1] = L->elem[j];
        }
        L->length--;
        
        return 0;
    }
    /**
     *查找操作
     */
    int Locate(struct List *L,ElemType e)
    {
        int i = 0;
        while (i<L->length&&L->elem[i]!=e) {
            i++;
        }
        if (i<=L->length) {
            return i+1;
        }else
        {
            return -1;
        }
        return 0;
    }
    int main()
    {
        struct List L;
        
        /**
         *  初始化线性表
         */
        InitList(&L);
        /**
         *  初始化数据
         */
        ListInit(&L);
        //查找
        printf("8元素在表中的%d位置\n", Locate(&L, 8));
        //插入操作
        ListInsert(&L, 1, 3);
        for (int i =0; i<L.length; i++) {
            printf("\n%d,",L.elem[i]);
        }
        //删除元素
        ElemType e;
        ListDelete(&L, 1, &e);
        for (int i =0; i<L.length; i++) {
            printf("\n%d,",L.elem[i]);
        }
    }
    

    相关文章

      网友评论

        本文标题:线性表的顺序存储结构(查找、插入、删除等)

        本文链接:https://www.haomeiwen.com/subject/jjgvrttx.html