顺序表代码实现

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

顺序表是一种基础的数据结构,它通过数组的形式存储数据元素,按照线性的顺序排列。在C语言中,你可以通过以下几个步骤来创建一个简单的顺序表: ```c #include <stdio.h> #include <stdlib.h> // 定义顺序表节点结构体 typedef struct Node { int data; // 节点存储的数据 struct Node* next; // 指向下一个节点的指针 } ListNode; // 定义顺序表结构体 typedef struct SequenceList { ListNode* head; // 链表头部指针 int size; // 当前列表长度 } SequenceList; // 初始化空顺序表 SequenceList* create_list() { SequenceList* list = (SequenceList*)malloc(sizeof(SequenceList)); list->head = NULL; list->size = 0; return list; } // 在指定位置插入元素 void insert_at_position(SequenceList* list, int position, int value) { if(position <= 0 || position > list->size + 1) { printf("Invalid position.\n"); return; } ListNode* newNode = (ListNode*)malloc(sizeof(ListNode)); newNode->data = value; newNode->next = NULL; if(position == 1) { // 插入到头 newNode->next = list->head; list->head = newNode; } else { ListNode* current = list->head; for(int i = 1; i < position - 1 && current != NULL; i++) { current = current->next; } newNode->next = current->next; current->next = newNode; } list->size++; } // 打印顺序表元素 void print_list(SequenceList* list) { ListNode* temp = list->head; while(temp != NULL) { printf("%d ", temp->data); temp = temp->next; } printf("\n"); } int main() { SequenceList* list = create_list(); insert_at_position(list, 1, 5); // 插入第一个元素 insert_at_position(list, 3, 10); // 插入第三个元素 print_list(list); // 输出:5 10 return 0; }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

写代码的大学生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值