本文采用Clion写码
//顺序表的增删查实现
#include <stdio.h>
#define MaxSize 50
/* 在对后续顺序表操作中都使用ElemType代替int,
* 如果想要换成别的数据类型的顺序表(float型),
* 直接在此行修改(快速方便),在此处改一处就行,后面在对顺序表的操作中使用的都是ElemType,无需改动*/
typedef int ElemType;
typedef struct{
ElemType data[MaxSize];
int length;
}SqList;
/* L前加引用是因为会对main中的L进行改变:L是一个结构体,
改变了L中的数组data(因为插入一个元素,数组中元素发生改变),
length发生改变(插入一个元素,+1)*/
//顺序表的插入,L会改变,所以用引用&
bool ListInsert(SqList &L,int pos,ElemType element) {//pos为物理位置
//判断插入位置是否合法
if (pos < 1 || pos > L.length + 1) {
return false;
}
//判断顺序表是否存储满
if (L.length == MaxSize) {
return false;
}
//循环把要插入位置的元素往后移动,空出位置
for (int i=L.length;i>=pos;i--){
L.data[i]=L.data[i-1];
}
//插入元素
L.data[pos-1]=element;
//数组长度+1
L.length++;
return true;
}
//顺序表的删除,L会改变,所以用引用&
bool ListDelete(SqList &L,int pos,ElemType &del_element){
//判断删除元素位置是否合法
if (pos < 1 || pos > L.length) {
return false;//一旦走到这里,该函数直接结束,不会再往下执行
}
//判断顺序表是否为空
if (L.length == 0) {
return false;
}
//先保存要删除的元素
del_element=L.data[pos-1];
//再循环把该位置后的元素往前移动
for (int i=pos;i<L.length;i++){
L.data[i-1]=L.data[i];
}
//注意控制好边界起始位置和结束条件
//这里的i在for循环中定义,所以i的有效范围为for的大括号内,离开这对大括号i失效
/*
//上面的for等价于以下,注意他们的起始位置和结束条件不一样
for (int i=pos-1;i<L.length-1;i++){
L.data[i]=L.data[i+1];
}
*/
//数组长度-1
L.length--;
return true;
}
//查找某个元素的位置,找到了就会对应位置, 没找到就返回0
int LocateElem(SqList L,ElemType element){
//判断元素是否存在
for(int i=0;i<L.length;i++){
if (element==L.data[i]){
return i+1;//因为往是数组的下标。加1以后才是顺序表的下际
}
}
return 0;//循环结束没找到
}
//打印顺序表,无需改变顺序表,不使用引用
void PrintList(SqList L){
for(int i=0;i<L.length;i++){
printf("%d ",L.data[i]);
}
printf("\n");
}
int main() {
SqList L;
//L是一个结构体变量,L中有一个50大小的存储整型的data数组(值规定了大小并未初始化),一个length整型变量
L.data[0]=1;//对L中存储整型的data数组第1个元素初始化
L.data[1]=2;//对L中存储整型的data数组第2个元素初始化
L.data[2]=3;//对L中存储整型的data数组第3个元素初始化
L.length=3;
bool ret;
ret=ListInsert(L,2,60);
if (ret) {
printf("Insert element successfully\n");
printf("After Insert,the L is:");
PrintList(L);
} else{
printf("Insert element failed\n");
}
//printf(ret ? "Insert element successfully" : "Insert element failed");
ElemType del_element;
ret=ListDelete(L,1,del_element);
if (ret) {
printf("Delete element successfully\n");
printf("After Delete,the L is:");
PrintList(L);
printf("del_element=%d\n",del_element);
} else{
printf("Delete element failed\n");
}
int pos;
pos=LocateElem(L,60);
if (pos){
printf("Found the element\n");
printf("The position of this element is %d\n",pos);
} else{
printf("The element does not exist\n");
}
return 0;
}