文章目录
下面写的代码可能感觉会很乱,所以加上了目录,意在为了引导,也就是你需要回顾哪个算法,就能够快速定位到该位置,如果从上往下去找的话,估计脑壳也疼死了。
一、线性表的基本操作
(一)顺序表的基本操作
1. 顺序表的结构体
#define MAX_SIZE 30 //设置顺序表最大容量
typedef struct
{
int data[MAX_SIZE]; //设置数据最大长度
int length; //设置数据当前长度
}Sqlist;
2. 顺序表的查找
/*
method:
顺序表的查找
param:
L 顺序表
n代表要查找的元素
*/
int Find_Elem(Sqlist L, int n)
{
int result = 0; //存放所查找到匹配值的下标
for (result; result < n; result++)
{
if (L.data[result] == n)
return result;
}
return ERROR;
}
3. 顺序表的插入
/*
method:
顺序表的插入
param:
sqlist 要操作的顺序表
pos 要插入的位置
data 要插入的数据
*/
int Insert_Elem(Sqlist* sqlist, int pos, int data)
{
int i = 0;
if (pos<0 || pos>sqlist->length || sqlist->length == MAX_SIZE) //这里是判断 如果 查询位置不在线性表内,或者线性表长度满了,则返回Error
return ERROR;
for (i = sqlist->length-1; i >= pos; i--) //这个循环将pos位置后面的元素由后往前向后挪1个位置
sqlist->data[i+1] = sqlist->data[i];
sqlist->data[pos] = data; //插入设定值
sqlist->length += 1; //线性表长度加1
return OK;
}
4. 顺序表的删除
/*
method:
顺序表的删除
param:
sqlist 要操作的顺序表
pos 要删除的位置
num 存放删除的元素
*/
int Delete_Elem(Sqlist* sqlist, int pos,int *num)
{
int i = pos;
if (pos<0 || pos >sqlist->length)
return ERROR;
*num = sqlist->data[pos]; //得到删除的值
for (i; i < sqlist->length; i++) //由前往后,pos位置后面的值依次往前移动
sqlist->data[i] = sqlist->data[i + 1];
sqlist->length -= 1; //线性表长度减1
return OK;
}
5. 顺序表的更改
/*
method:
顺序表的更改
param:
sqlist 要操作的顺序表
pos 要修改的位