数据结构与算法2——线性顺序存储

  线性表顺序结构,非链式:

             包含两个部分:

          1.数组内存放的是要存储的数据,同时给出最大容量

                                   2.最后一个数据的下标,由此可知实际存储的数据总数。

 

结构体描述:

typedef struct()
    {
      double data[max];//最多能存储的总数,表的最大容量
      int last;//last 是实际存储数据的最后一个的下标;  
    }List;

List *Ptrl;
Ptrl->last+1 是存储的数据总数,即表的实际长度

 

    数据表效果如图,要注意第几个数与下标之间的+1关系,避免代码出错:

       

    建立空表函数,注意申请内存需要强制转换,否则是空指针的结构

List *Makeempty()
{
    List *Ptrl;
    Ptrl=(List *)malloc(sizeof(List));
    Ptrl->last=-1;//空表
    return Ptrl;        

}

 

    查找数据函数

int find(double x,List *Ptrl)
{  int i=0;
   while(Ptrl->data[i]!=x && i<=Ptrl->last)
      i++;
   if(i>Ptrl->last) return -1;
   else return i;
}

    

    插入函数,插入第i(1<=i<=last+2)个数据,即可以在下标0--last+1的位置上插入:

void add(double x,int i, List *Ptrl)
{  
    int j;
    if(Ptrl->last==max-1) {printf("full"); return;}//表内已经有max个数据
    if(i<1 || i>Ptrl->last+2) {printf("error"); return;}//只能插入第1个数到last+2个数
    for(j=Ptrl->last; j>=i-1; j--)
       Ptrl->data[j+1]=Ptrl->last[j];
       ptrl->data[i-1]=x;
       Ptrl->last++;//存储实际数据个数加1,下标加1,注意更新数据总数
     return;
}            

         

    删除函数,删除第i个(1<=i<=last+1)数据,即可以删下标0-last的数据

void delete(int i,List *Ptrl)
{    int j;
        if(Ptrl->last==-1) {printf("empty"); return;}
         if(i<1||i>Ptrl->last+1) {printf("error"); return;}
    for(j=i-1;j<Ptrl->last;j++)
        Ptrl->data[j]=Ptrl->data[j+1];
    Ptrl->last--;//实际存储数据个数-1,下标-1,注意更新数据总数
    return;
}

posted on 2017-06-18 23:38  guoshiyv  阅读(291)  评论(1编辑  收藏  举报

导航