写了一天,终于将线性表的顺序存储实现了,顺便恶补了一下指针内容。顺序存储,适合做查询,链式存储适合做增删。
添加方法主要就是将线性表从后往前遍历,依次往后挪一位,直到空出想要插入的位置,删除方法就是将线性表从要删除
的地方往后遍历,依次往前挪一位。
#include #include #define MAXLENGTH 20
typedef int Eletype;
typedef struct{
Eletype data[MAXLENGTH];
int length;
}SqList;
void init(SqList *l){
l->length=0;
}
void addData(SqList *l){
l->length=5;
for(int i=0;ilength;i++){
l->data[i]=i+1;
}
}
void addsData(SqList *l){
l->length=5;
for(int i=0;ilength;i++){
l->data[i]=i*2;
}
}
void getEle(SqList l,int index,Eletype *e){
if(l.length<1){
printf("该线性表为空\n");
return ;
}else{
if(index<=l.length&&index>0){
*e=l.data[index-1];
}else{
printf("所取的位置不在线性表范围内\n");
return ;
}
}
}
void display(SqList l,int size){
Eletype e;
printf("线性表中数据为:\n");
for(int i=1;i<=size;i++){
getEle(l,i,&e);
printf("%d ",e);
}
printf("\n");
}
void insertEle(SqList *l,int index,Eletype e){
if(l->lengthlength&&index>0){
for(int i=l->length-1;i>=index-1;i--){
l->data[i+1]=l->data[i];
}
l->data[index-1]=e;
l->length++;
}else if((index-1)==l->length){
l->data[index-1]=e;
l->length++;
}else{
printf("所插入的位置不在线性表范围内\n");
return ;
}
}else{
printf("所要插入的线性表已满\n");
return ;
}
}
void deleteEle(SqList *l,int index,Eletype *e){
if(l->length<1){
printf("该线性表为空\n");
return ;
}else{
if(index>l->length||index<1){
printf("所要删除的数据不在线性表范围内\n");
}else{
*e=l->data[index-1];
for(int i=index-1;ilength;i++){
l->data[i]=l->data[i+1];
}
l->length--;
}
}
}
int hnh(SqList l,Eletype e){
int result;
for(int i=0;ilength;
q++;
insertEle(a,q,e);
continue;
}else{
continue;
}
}
}
int main()
{
SqList l,s;
Eletype e;
init(&l);
addData(&l);
addsData(&s);
display(l,5);
display(s,5);
hb(&l,s);
display(l,8);
}