雷州网站建设,大型网站的技术架构问题,福田官网,为什么做网站费用贵一.插入#xff1a;插入前先移动后面的元素
1.图解#xff1a; 在b和d之间插入c#xff0c;此时就需要把d#xff0c;e#xff0c;f都向后移一位#xff0c;腾出一个位置后插入c。
2.代码实现#xff1a;
#includestdio.h
#define MaxSize 10 //定义最大长度…一.插入插入前先移动后面的元素
1.图解 在b和d之间插入c此时就需要把def都向后移一位腾出一个位置后插入c。
2.代码实现
#includestdio.h
#define MaxSize 10 //定义最大长度typedef struct
{int data[MaxSize]; //用静态的数组存放数据元素int length; //顺序表的当前长度
}SqList; //顺序表的类型定义
//基本操作 - 初始化一个顺序表
void InitList(SqList L)
{for(int i0;iMaxSize;i){L.data[i]0; //将所有数据元素设置为默认初始值 }L.length0; //顺序表初始长度为0 因为一开始没存元素
}
//插入
void ListInsert(SqList L,int i,int e) //i必须在1到Length1上才有效/*比如长度为5要加在第6个位置上往后移动一个位置就长度为6此时可添加在第6个位置上如果仍长度为5要加在第7个位置上往后移动一个位置就长度为6没有第7个位置添加失败*///元素存满时也不能继续插入数据
{for(int jL.length ; ji ; j--) //将第i个元素及之后的元素后移 {L.data[j]L.data[j-1];}L.data[i-1]e; //在位置i处放入eL.length; //长度加1因为多了一个元素
}
int main()
{SqList L; //声明一个顺序表InitList(L); //初始化顺序表//...此处省略一些代码插入几个元素ListInsert(L,3,3); return 0;
}
/*位序从1开始数组索引从0开始 */ 代码优化
#includestdio.h
#includestdbool.h
#define MaxSize 10 //定义最大长度typedef struct
{int data[MaxSize]; //用静态的数组存放数据元素int length; //顺序表的当前长度
}SqList; //顺序表的类型定义
//基本操作 - 初始化一个顺序表
void InitList(SqList L)
{for(int i0;iMaxSize;i){L.data[i]0; //将所有数据元素设置为默认初始值 }L.length0; //顺序表初始长度为0 因为一开始没存元素
}
//插入
bool ListInsert(SqList L,int i,int e) //i必须在1到Length1上才有效/*比如长度为5要加在第6个位置上往后移动一个位置就长度为6此时可添加在第6个位置上如果仍长度为5要加在第7个位置上往后移动一个位置就长度为6没有第7个位置添加失败*///元素存满时也不能继续插入数据
{if(i1||iL.length1) //判断i的范围是否有效 {return false;}if(L.lengthMaxSize) //判断当前存储空间是否已满以决定能否继续插入 {return false;}//走到这儿说明能插入数据 for(int jL.length ; ji ; j--) //将第i个元素及之后的元素后移 {L.data[j]L.data[j-1];}L.data[i-1]e; //在位置i处放入eL.length; //长度加1因为多了一个元素 return true;
}
int main()
{SqList L; //声明一个顺序表InitList(L); //初始化顺序表//...此处省略一些代码插入几个元素ListInsert(L,3,3); return 0;
}
/*位序从1开始数组索引从0开始 */ 3.时间复杂度
问题规模nL.length(表长)当添加一个元素后长度为n1
所以在第一个位置添加元素时要把前n个元素后移空出第一个位置此时长度为n1。 二.删除删除后先移动前面的元素
1.图解 删除c后后面的d,e,f都要前移一个数组长度减一。 2.代码实现
#includestdio.h
#includestdbool.h
#define MaxSize 10 //定义最大长度
typedef struct
{int data[MaxSize]; //用静态的数组存放数据元素int length; //顺序表的当前长度
}SqList; //顺序表的类型定义
//基本操作 - 初始化一个顺序表
void InitList(SqList L)
{for(int i0;iMaxSize;i){L.data[i]0; //将所有数据元素设置为默认初始值 }L.length0; //顺序表初始长度为0 因为一开始没存元素
}
//删除
bool ListDelete(SqList L,int i,int e)
/*参数L:代表要删除的顺序表参数i:代表要删除的第i个元素;参数e:代表把删除的元素返回*/
{if(i1||iL.length) //判断i的范围是否有效 (判断语句为或:全假才假-才不走if;只要有一个是真就是真-就走if)//本例i为3L.length为0所以iL.length为真走if {return false;}//走到这儿说明i有效能删除数据eL.data[i-1]; //将被删除的元素赋值给efor(int ji;jL.length;j) //将第i个位置后的元素前移 {L.data[j-1]L.data[j];} L.length--; //线性表长度减一return true;
}
int main()
{SqList L; //声明一个顺序表InitList(L); //初始化顺序表//...此处省略一些代码插入几个元素int e-1; //用变量e把删除的元素带回来if( ListDelete(L,3,e) ){printf(已删除第3个元素删除的元素的值为%d \n,e);}else{printf(位序i不合法删除失败 \n);} return 0;
}
ListDelete第三个参数有个这样就使得main函数里的e和ListDelete函数里的e是同一个e
不加main函数里的e和ListDelete函数里的e就不是同一个e了执行完ListDelete函数后main函数里的e的值没发生改变。
3.时间复杂度 例如i为2时剩下n-2个然后剩下的n-2个依次循环。 三.总结