數據結構與算法2-1 線性順序存儲
阿新 • • 發佈:2017-06-19
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 線性順序存儲