线性表

作者: 日常表白结衣 | 来源:发表于2017-07-26 11:05 被阅读0次

    【什么是算法?】
    空间复杂度S(n):根据算法写成的程序在执行时占用存储单元的长度。
    时间复杂度T(n):根据算法写成的程序在执行时消耗的时间长度。
    分析算法复杂度
    Tworst(n):最坏情况复杂度
    Tav(n):平均复杂度
    【什么是线性表?】
    “线性表(Linear List)”:由同类数据元素构成有序序列的线性结构
    表中的元素个数称为线性表的长度,没有元素时称为空表,表的起始位置称为表头,结束位置称为表尾。
    【线性表的顺序存储实现】

    typedef struct Lnode *List;
    struct Lnode {
              ElementType Data[MAXSIZE];
              int Last;     //线性表最后一个元素
    };
    struct LNode L;
    List PtrL; //PtrL为指向结构体的指针 || struct Lnode * PtrL
    

    访问下标为i的元素:L.Data[i]或者PtrL->Data[i]
    线性表长度:L.Last+1或者PtrL->Last+1
    【线性表的主要操作】
    1、初始化(建立空的顺序表)

    List MakeEmpty()
    {
        List PtrL;
        PtrL=(List )malloc(sizeof(struct LNode));
        PtrL->Last=-1;
        return PtrL;
    }
    

    2、查找

    /* 查找成功的平均比较次数是(n+1)/2
        平均时间性能是O(n) */
    int Find()(ElementType X,List PtrL)
    {
        int i=0;
        while(i<=PtrL->Last && PtrL->Data[i]!=X)
                i++;
         if(i>PtrL->Last)    return -1;
         else  return i;
    }
    

    3、插入

    /* 第i个位置上插入一个值为x的新元素 */
    void Insert(ElementType X, int i, List PtrL)
    {
            /*MAXSIZE 数组大小*/
        if (PtrL->Last == MAXSIZE - 1) {
            printf("表满");
            return;
        }
        if (i<1 || i>PtrL->Last + 2) {
            printf("位置不合法");
            return;
        }
        for (j = PtrL->Last; j >= i - 1; j--)
            PtrL->Data[j + 1] = PtrL->Data[j];
        PtrL->Data[i - 1] = X;
        PtrL->Last++;
        return;
    }
    

    4、删除

    /* 删除表的第i个位置上的元素 */
    void Delete(int i, List PtrL)
    {
        int j;
        if (i<1 || i>PtrL->Last + 1) {
            printf("不存在第%d个元素", i);
            return;
        }
        for (j = i; j <= PtrL->Last; j++)
            PtrL->Data[j - 1] = PtrL->Data[j];
        PtrL->Last--;
        return;
    }
    

    相关文章

      网友评论

          本文标题:线性表

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