1. 程式人生 > >數據結構與算法2-1 線性順序存儲

數據結構與算法2-1 線性順序存儲

splay 申請 一個數 str 刪除 all eem 算法 mar

  線性表順序結構,非鏈式:

包含兩個部分:

          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的位置上插入:

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;
}

數據結構與算法2-1 線性順序存儲