线性表

2022-04-04-16:59:28

什么是线性表????

多项式表示问题启示:

  1.同一个问题可以有不同的表示形式

  2.有一类共性问题:有序线性序列的组织和管理

线性表:由同类型数据元素构成有序序列的线性结构

  表中元素个数为线性表的长度

  线性表没有元素时,为空表

  表起始位置为表头,结束位置为表尾

/*1.初始化(建立空的顺序表)*/
List MakeEmpty()
{    List PtrL;
     PtrL = (List)malloc(sizeof(struct LNode));
     PtrL->Last = -1;
     return PtrL;
}
/*2.查找*/
int Find(ElementType X,List PtrL)
{    int i = 0;
     while(i <= PtrL->Last && PtrL->Data[i] != X)
         i++;
     if(i > PtrL->Last) return -1;/*如果没有找到,返回-1*/
     else return i;/*找到后返回的是存储位置*/
}
/*3.插入(第i(1<i<n+1)个位置上插入一个值X的新元素)*/
    /*先移动,在插入*/
void Insert(ElementType X,int i,List PtrL)
{    int j;
     if(PtrL->Last == MAXSIZE-1)
     {
     /*表空间已满,不能插入*/
         printf("表满");
         return;
     }
     if(i<1||i>PtrL->Last+2)
     {
     /*检查插入位置的合法性*/
         print("位置不合法");
         return:
     }
     for ( j=PtrL->Last;j>=i+1;j--)
         PtrL->Data[j+1] = PtrL->Data[j];/*将i到n倒序向后移动*/
     PtrL->Data[i-1] = X;/*新元素插入*/
     PtrL->Last++;/*Last任指向最后元素*/
     return:        
}

/*4.删除元素*/
viid 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];/**将i+1到n顺序向前移/
    PtrL->Last--;/**PtrL任指向最后元素/
    return;

}

线性表的链式存储及实现:

       不要求逻辑上相邻的两个元素物理上也相邻 

       插入删除不需要移动数据元素

/*1.求表长*/
int Length(List PtrL)
{    List p = PtrL;/*p指向表的第一个结点*/
     int j = 0;
     while(p){
         p = p->Next;
         j++;/*当前p指向的是第j个结点*/
     }
     return j;

}

 

posted on 2022-04-04 17:53  xiwei-ff  阅读(50)  评论(0编辑  收藏  举报