数据结构与算法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;
}