线性表

2017-07-26  本文已影响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;
}
上一篇 下一篇

猜你喜欢

热点阅读