线性表顺序结构,非链式:
包含两个部分:
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; }