当前位置: 首页> 汽车> 车展 > 东莞市公共资源交易中心_福州小程序开发公司_营销推广计划_百度关键字排名软件

东莞市公共资源交易中心_福州小程序开发公司_营销推广计划_百度关键字排名软件

时间:2025/8/23 8:35:42来源:https://blog.csdn.net/muxue178/article/details/145503569 浏览次数: 0次
东莞市公共资源交易中心_福州小程序开发公司_营销推广计划_百度关键字排名软件

1.概念:

顺序表是一种线性表的存储结构,它使用一段连续的存储空间来存储数据元素。顺序表的特点是:

  1. 逻辑上相邻的元素在物理存储上也相邻

  2. 支持随机访问,可以通过下标直接访问元素。

  3. 插入和删除操作可能需要移动大量元素,时间复杂度较高。

2.基本操作:

顺序表的基本操作包括:

  1. 初始化:创建一个空的顺序表。

  2. 插入:在指定位置插入一个元素。

  3. 删除:删除指定位置的元素。

  4. 查找:根据值或下标查找元素。

  5. 修改:修改指定位置的元素。

  6. 遍历:访问顺序表中的所有元素。

  7. 销毁:释放顺序表占用的内存。

3.代码实现:

#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100 // 定义顺序表的最大容量typedef struct {int data[MAX_SIZE]; // 用数组存储数据int length;         // 当前顺序表的长度
} SeqList;// 初始化顺序表
void InitList(SeqList* L) {L->length = 0; // 初始长度为 0
}// 插入元素
int InsertList(SeqList* L, int pos, int value) {if (pos < 1 || pos > L->length + 1) {printf("插入位置不合法\n");return 0; // 插入失败}if (L->length >= MAX_SIZE) {printf("顺序表已满,无法插入\n");return 0; // 插入失败}// 将插入位置后的元素向后移动for (int i = L->length; i >= pos; i--) {L->data[i] = L->data[i - 1];}L->data[pos - 1] = value; // 插入新元素L->length++;              // 长度加 1return 1; // 插入成功
}// 删除元素
int DeleteList(SeqList* L, int pos) {if (pos < 1 || pos > L->length) {printf("删除位置不合法\n");return 0; // 删除失败}// 将删除位置后的元素向前移动for (int i = pos; i < L->length; i++) {L->data[i - 1] = L->data[i];}L->length--; // 长度减 1return 1; // 删除成功
}// 查找元素(按值查找)
int FindList(SeqList* L, int value) {for (int i = 0; i < L->length; i++) {if (L->data[i] == value) {return i + 1; // 返回元素位置(从 1 开始)}}return -1; // 未找到
}// 修改元素
int ModifyList(SeqList* L, int pos, int value) {if (pos < 1 || pos > L->length) {printf("修改位置不合法\n");return 0; // 修改失败}L->data[pos - 1] = value; // 修改元素return 1; // 修改成功
}// 遍历顺序表
void PrintList(SeqList* L) {printf("顺序表内容:");for (int i = 0; i < L->length; i++) {printf("%d ", L->data[i]);}printf("\n");
}int main() {SeqList L;InitList(&L); // 初始化顺序表// 插入元素InsertList(&L, 1, 10);InsertList(&L, 2, 20);InsertList(&L, 3, 30);PrintList(&L); // 输出:10 20 30// 删除元素DeleteList(&L, 2);PrintList(&L); // 输出:10 30// 查找元素int pos = FindList(&L, 30);if (pos != -1) {printf("元素 30 的位置:%d\n", pos); // 输出:元素 30 的位置:2}// 修改元素ModifyList(&L, 1, 100);PrintList(&L); // 输出:100 30return 0;
}

运行结果 

顺序表内容:10 20 30 
顺序表内容:10 30 
元素 30 的位置:2
顺序表内容:100 30 

 4.优缺点:

优点:

  1. 随机访问:可以通过下标直接访问元素,时间复杂度为 O(1)O(1)。

  2. 存储效率高:数据存储在一段连续的内存中,不需要额外的指针空间。

缺点:

  1. 插入和删除效率低:需要移动大量元素,时间复杂度为 O(n)O(n)。

  2. 容量固定:顺序表的大小通常是固定的,扩容时需要重新分配内存并复制数据。

 5.适用场景:

  • 需要频繁访问元素,而插入和删除操作较少的场景。

  • 数据量较小且已知最大容量的场景。

如果数据量较大或需要频繁插入和删除,可以考虑使用链表

关键字:东莞市公共资源交易中心_福州小程序开发公司_营销推广计划_百度关键字排名软件

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: