数据结构:顺序表

ops/2024/9/24 12:51:52/

1.顺序表的概念

顺序表是用一段 物理地址连续 的存储单元依次存储数据元素的线性结构,一般情况下采用数组存
储。在数组上完成数据的增删查改。

2.接口实现 

 2.1初始化

void SLInit(SL* psl)
{assert(psl);psl->a = (SeqListData*)malloc(sizeof(SeqListData)*4);if (NULL == psl->a){perror("malloc");return;}psl->capacity = 4;psl->size = 0;
}

 2.2销毁

void SLDestroy(SL* psl)
{assert(psl);free(psl->a);psl->a = NULL;psl->capacity = 0;psl->size = 0;
}

 2.3顺序表打印

void SLPrint(SL* psl)
{assert(psl);for (int i = 0; i < psl->size; i++){printf("%d ",psl->a[i]);}
}

 2.4增加数据

 2.4.1检查容量

void ChackCapacity(SL* psl)
{assert(psl);if (psl->size == psl->capacity){SeqListData* tmp = (SeqListData*)realloc(psl->a, sizeof(SeqListData) * psl->capacity * 2);if (NULL == tmp){perror("realloc fail");return;}psl->a = tmp;psl->capacity *= 2;}
}

在增加数据之前,需要检查是否有足够的容量。不够就扩容。 

 2.4.2头插

void SLPushFront(SL* psl, SeqListData x)
{assert(psl);ChackCapacity(psl);int end = psl->size - 1;while (end >= 0){psl->a[end + 1] = psl->a[end];end--;}psl->a[0] = x;psl->size++;
}

 2.4.3尾插 

void SLPushBack(SL* psl, SeqListData x)
{assert(psl);ChackCapacity(psl);psl->a[psl->size++] = x;
}

 2.4.4在pos位置增加数据

void SLInsert(SL* psl, int pos, SeqListData x)
{assert(psl);assert(0<=pos && pos<= psl->size);ChackCapacity(psl);int end = psl->size - 1;while (end >= pos){psl->a[end+1] = psl->a[end];end--;}psl->a[pos] = x;psl->size++;
}

前面的头插和尾插可以复用这段代码。 

 2.5删除数据

 2.5.1头删

void SLPopFront(SL* psl)
{assert(psl);assert(psl->size > 0);int start = 0;while(start < psl->size - 1){psl->a[start] = psl->a[start+1];++start;}psl->size--;
}

 2.5.2尾删

void SLPopBack(SL* psl)
{assert(psl);assert(psl->size > 0);psl->size--;
}

 2.5.3在pos位置删除数据

void SLErase(SL* psl, int pos)
{assert(psl);assert(0<=pos && pos<psl->size);int start = pos + 1;while (start < psl->size){psl->a[start-1] = psl->a[start];start++;}psl->size--;
}

头删和尾删可以复用这段代码。 

 2.6查找数据

int SLFind(SL* psl, SeqListData x)
{assert(psl);for (int i = 0; i < psl->size; i++){if (psl->a[i] == x){return i;}}return -1;
}

2.7修改数据 

void SLModify(SL* psl, SeqListData x, int pos)
{assert(psl);psl->a[pos] = x;
}


http://www.ppmy.cn/ops/38228.html

相关文章

外贸客户初次合作不付定金你怎么看

小伙伴有没有遇到这种情况&#xff0c;有一个非常大的订单&#xff0c;但是客户又不愿意付定金怎么办&#xff1f;你接还是不接。 那咱们这个小伙伴呢&#xff0c;就是说&#xff0c;这个客户&#xff0c;他是一个中间商&#xff0c;然后中间商的话呢&#xff0c;他这个订单量…

【MySQL】2.深入理解MySQL:数据类型、DDL与DML语句全解析

数据类型、DDL&#xff08;数据定义语言&#xff09;和DML&#xff08;数据操纵语言&#xff09;语句构成了数据管理和操作的核心。从精心选择数据类型以优化存储和查询性能&#xff0c;到运用DDL语句设计和调整数据库结构&#xff0c;再到使用DML语句对数据进行日常的增删改查…

超越视觉极限:深度学习图像超分辨率算法清单【第六部分】

超越视觉极限&#xff1a;深度学习图像超分辨率算法清单【第六部分】 简介2023年 - Deep learning-based Single-Image Super-Resolution2023年 - Super-resolution of magnetic systems using deep learning2023年 - Spectral super-resolution meets deep learning2023年 - S…

Java.lang.IndexOutOfBoundsException数组下标越界异常解决方案

java.lang.IndexOutOfBoundsException 是 Java 中表示数组下标越界异常的一个标准运行时异常。在 Java 中&#xff0c;数组是一种固定大小的数据结构&#xff0c;每个元素通过其在数组中的位置&#xff08;即下标或索引&#xff09;来访问。如果尝试访问的数组下标超出了数组的…

【js开发记录笔记】js开发记录笔记

整理的函数以及注意点 css 强制!important includes 函数 //示例&#xff1a; Input: [1, 2, 3, 4, 5].includes(2); Output: true;Input: [1, 2, 3, 4, 5].includes(9); Output: false;方法 1.同步方法获取接口返回值: new Promise((resolve) > {dataList this.Addtree…

如何来整合 CDI-Unit 和 JUnit 5

目前&#xff0c;CDI-Unit 本身并不直接支持 JUnit 5&#xff0c;因为它主要是为 JUnit 4 设计的。由于 JUnit 5 引入了一个全新的扩展模型&#xff0c;这意味着需要使用特定的扩展来集成 CDI-Unit 功能&#xff0c;或者找到其他方式来实现类似的功能。 虽然没有一个官方的 ju…

MySql表的增删查改(CRUD)

对表中的数据操作分为4大类&#xff0c;增加数据&#xff0c;删除数据&#xff0c;查找数据&#xff0c;修改数据。对表中的数据进行增删查改操作简称为CRUD。Create(增),Retrieve(查找),Updata(修改&#xff09;,Delete(删除)CRUD的操作是对表中的数据进行操作的&#xff0c;是…

实时数仓总结

一、概念 1.1、数仓 数据仓库之父比尔恩门&#xff08;Bill Inmon&#xff09;在1991年出版的“Building the Data Warehouse”&#xff08;《建立数据仓库》&#xff09;一书中所提出的定义被广泛接受&#xff0c;数据仓库是一个面向主题的&#xff08;Subject Oriented&…