1.顺序表结构体定义
#define Max_Size 100
typedef int ElemType;
typedef struct {
ElemType data[Max_Size]; //存放顺序表中的元素
int length; //顺序表的长度
}SqList;
首先,定义顺序表最大容量为100,并且使用ElemType
来指定元素的类型。
元素类型也可以像这样定义:
typedef struct Stu {
char number[8]; //学生的学号
char name[4]; //学生的姓名
char sex; //学生的性别
int age; //学生的年龄
}ElemType;
2.创建顺序表
//建立顺序表
void CreateList(SqList* L,ElemType a[],int n) {
L = (SqList*)malloc(sizeof(SqList));//为顺序表动态分配一个存储空间
if (L == NULL) {
// 处理内存分配失败的情况
printf("内存分配失败\n");
return;
}
for (int i = 0; i < n; ++i) {
L->data[i] = a[i];
}
L->length = n;
}
这段代码是用来创建一个顺序表的。它接受一个元素数组和数组长度,然后将这些元素复制到新分配的顺序表中,并设置顺序表的长度。
3.顺序表的初始化和销毁
初始化顺序表
//初始化顺序表
void InitSqList(SqList* L) {
L = (SqList*)malloc(sizeof(SqList));
L->length = 0;
}
销毁顺序表
//销毁顺序表
void DestroyList(SqList* L) {
free(L);
}
4.顺序表的增删改查
4.1在顺序表中插入某个元素
//在顺序表的第n个位置插入某个元素
void InsertSqList(SqList* L,ElemType e,int n) {
if(n < 1 || n > L->length) {
printf("插入的位置不合法\n");
return;
}
//将位置在n之后的每个元素往后移动一位,再进行插入
for (int i = L->length; i >= n; --i) {
L->data[i] = L->data[i - 1];
}
L->data[n - 1] = e;
L->length++;
}
在顺序表第n个位置插入一个元素,可以现将顺序表中在n之后的元素往后移动一位再进行插入,因为只进行了一次遍历,这个算法的时间复杂度为O(n)。
4.2删除顺序表中某个位置的元素
//删除顺序表第n个位置的元素
void DateList(SqList* L,int n) {
if(n < 1 || n > L->length) {
printf("删除的位置不合法\n");
return;
}
for (int i = n - 1; i < L->length - 1; ++i) {
L->data[i] = L->data[i + 1];
}
L->length--;
}
在顺序表第n个位置删除一个元素,可以现将顺序表中在n之后的元素往前移动一位再,因为只进行了一次遍历,这个算法的时间复杂度为O(n)。
4.3修改顺序表中某个位置的元素
//修改顺序表中第n个位置的元素
void ChangeSqList(SqList* L,int n,ElemType e) {
if(n < 1 || n > L->length) {
printf("输入位置不合法\n");
return;
}
L->data[n - 1] = e;
}
4.4查找顺序表中的某个元素
按元素值查找,返回在顺组表的位置
//按元素值查找,返回在顺序表的位置
int FindSqList(SqList* L,ElemType e) {
for (int i = 0; i < L->length; ++i) {
if(L->data[i] == e) {
return i;
}
}
return -1;
}
按位置查找,返回元素值
//按位置查找,返回元素值
ElemType FindSqList(SqList* L,int n) {
if(n < 1 || n > L->length) {
printf("输入位置不合法\n");
return -1;
}
return L->data[n - 1];
}
以上是顺序表的一些基本操作,原版代码上传至(https://gitee.com/shi-chengfu)
如果有错误请联系QQ:303613518