一、首先什么是顺序表?
顺序表是线性结构,以静态数组为内存的一种存储结构。
有三个成员
数组最大长度:max_size
数组目前长度:size
数组名:list
typedef struct{
int list[max_size];
int size;
}Sqlist;
二、创建
代码:
void init_list(Sqlist * pL){
pL->size = 0;
return;
}
三、插入指定位置元素
思路:
函数功能:在第i个位置前插入一个元素,元素值为val,成功返回ture;失败返回false;
思路;
1.判断顺序表是否空是否满,插入位置i是否合法
2.在1的基础上
先把包括i到size之间元素都后移到一个单位
再把i位置上的值赋值为val即可
代码:
bool en_list(Sqlist * pL,int i,int val){
if(pL->size >= 100 || (i<0||i>pL->size)){
return false;
} else{
for(int j = pL->size;j>i;j--){
pL->list[j]=pL->list[j-1];
}
pL->list[i] = val;
pL->size++;
return true;
}
}
四、遍历元素
void traverse_list(Sqlist * pL){
printf("当前的顺序表元素是:\n");
for(int i=0;i<pL->size;i++){
printf("%d\t",pL->list[i]);
}
}
五、删除指定位置元素
思路:
函数功能:删除第i个位置元素,元素值为val,成功返回ture;失败返回false;
思路;
1.判断顺序表是否空是否满,删除位置i是否合法
2.在1的基础上
先把i位置上的值保存在*pVal中
再把i+1到size之间元素都前移到一个单位
代码:
bool delete_list(Sqlist * pL,int i,int *pVal){
if(pL->size >= 100 || (i<0||i>pL->size)){
return false;
}else{
*pVal = pL->list[i];
for(int j = i+1;j<pL->size;j++){
pL->list[j-1]=pL->list[j];
}
pL->size--;
return true;
}
}
六、取出指定位置元素
思路:
函数功能:取出第i个位置元素,元素值为val,成功返回ture;失败返回false;
思路;
1.判断顺序表是否空是否满,删除位置i是否合法
2.在1的基础上
把i位置上的值保存在*pVal中即可
代码:
bool get_list(Sqlist * pL,int i,int * pVal){
if(pL->size >= 100 || (i<0||i>pL->size)){
return false;
}else{
*pVal = pL->list[i];
return true;
}
}
七、主函数代码:
#include <stdio.h>
#define max_size 100
typedef struct{
int list[max_size];
int size;
}Sqlist;
void init_list(Sqlist * pL);
//第i个位置前插入一个元素,元素值为val
bool en_list(Sqlist * pL,int i,int val);
void traverse_list(Sqlist * pL);
//第i个位置前删除一个元素,删除的值为val
bool delete_list(Sqlist * pL,int i,int *pVal);
//拿出第i个位置元素,拿出的值为val
bool get_list(Sqlist * pL,int i,int * pVal);
int main(void){
Sqlist L;
init_list(&L);
int val;
for(int i=0;i<7;i++){
printf("请输入顺序表中第%d个的元素值:",i);
scanf("%d",&val);
en_list(&L,i,val);
}
traverse_list(&L);
int pos,val1;
printf("\n请输入你要插入的元素位置:");
scanf("%d",&pos);
printf("\n请输入你要插入的元素的值:");
scanf("%d",&val1);
if(en_list(&L,pos,val1)){
printf("\n插入元素成功!插入的值是:%d\n",val1);
}else{
printf("插入元素失败!");
}
traverse_list(&L);
printf("\n请输入你要删除的元素位置:");
scanf("%d",&pos);
if(delete_list(&L,pos,&val1)){
printf("\n删除元素成功!删除的值是:%d\n",val1);
}else{
printf("删除元素失败!");
}
traverse_list(&L);
printf("\n请输入你要取出的元素位置:");
scanf("%d",&pos);
if(get_list(&L,pos,&val1)){
printf("取出元素成功!取出的值是:%d",val1);
}else{
printf("取出元素失败!");
}
traverse_list(&L);
return 0;
}
运行结果: