顺序表代码实现

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

posted @ 2024-10-15 19:28  写代码的大学生  阅读(66)  评论(0)    收藏  举报  来源