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