当前位置: 首页 > news >正文

建设厅教育培训网站在wordpress上添加播放器

建设厅教育培训网站,在wordpress上添加播放器,建网站怎么避免备案,杭州设计院目录 前言一、定义与特点二、类型三、基本操作四、应用场景五、优缺点六、元素插入和删除动态图解插入删除 七、代码模板八、使用顺序表的经典例题1.求奇数的乘积代码题解 2.数值统计代码题解 九、总结结语 前言 顺序表示最基础的数据结构之一,它也是我们学习开始学…

目录

  • 前言
  • 一、定义与特点
  • 二、类型
  • 三、基本操作
  • 四、应用场景
  • 五、优缺点
  • 六、元素插入和删除动态图解
    • 插入
    • 删除
  • 七、代码模板
  • 八、使用顺序表的经典例题
    • 1.求奇数的乘积
      • 代码题解
    • 2.数值统计
      • 代码题解
  • 九、总结
  • 结语

前言

顺序表示最基础的数据结构之一,它也是我们学习开始学习数据结构的第一个必须要掌握的数据结构,学习数据结构一定是由浅到深,所以我们最好是先学习简单的在学习有难度的,因为直接学习难的数据结构很容易劝退,让我们来深入了解顺序表。
在这里插入图片描述

一、定义与特点

定义:顺序表(Sequence List)是线性表的一种实现方式,它使用一段地址连续的存储单元依次存储线性表的数据元素。

特点
1.数据元素在物理存储上是连续的,这使得顺序表在访问元素时具有较高的效率。
2.顺序表支持随机访问,即可以通过索引直接访问表中的任意元素,时间复杂度为O(1)。
3.顺序表的插入和删除操作可能需要移动大量的元素,尤其是在插入或删除中间位置的元素时,时间复杂度为O(N),其中N是表中元素的数量。

二、类型

静态顺序表:静态顺序表在初始化后,其空间大小就不能更改。这意味着如果空间不足,就无法向表中添加新的元素;而如果空间过大,则可能造成内存的浪费。因此,静态顺序表在实际应用中具有一定的局限性。

动态顺序表:动态顺序表则可以根据需要动态地调整空间大小。当空间不足时,可以自动扩容;当空间过多时,也可以进行缩容(尽管在实际应用中缩容并不常见)。这使得动态顺序表在实际应用中更加灵活和高效

三、基本操作

初始化:为顺序表分配必要的存储空间,并初始化相关参数(如有效数据个数、容量等)。

销毁:释放顺序表所占用的存储空间,以避免内存泄漏。
插入:在顺序表的指定位置插入一个新的元素。这可能需要移动其他元素来腾出位置。

删除:从顺序表中删除指定位置的元素。这同样可能需要移动其他元素来填补位置。

查找:在顺序表中查找指定值的元素,并返回其位置(如果存在)。这通常通过遍历数组来实现。

访问:通过索引直接访问顺序表中的指定元素。这是顺序表的一个主要优点。

四、应用场景

顺序表适用于需要频繁访问元素的场景,因为顺序表支持随机访问,可以在常数时间内访问到表中的任意元素。此外,顺序表也适用于元素个数相对稳定的场景,因为频繁的插入和删除操作可能会导致顺序表的效率下降。

五、优缺点

优点
支持随机访问,访问速度快。
在物理存储上是连续的,有利于CPU高速缓存的命中率。

缺点
插入和删除操作可能需要移动大量的元素,效率较低。
在空间不足时需要扩容,扩容操作可能比较耗时且浪费空间(尽管通常采用两倍扩容策略来减少扩容次数)。

六、元素插入和删除动态图解

插入

在这里插入图片描述

删除

在这里插入图片描述

七、代码模板

#include<iostream>
using namespace std;#define eType intstruct SequentialTable {eType* elements;int size;int capacity;
};void initailizeTable(SequentialTable* list, int capacity) {//1.初始化顺序表list->elements = new eType[capacity];//elements申请内存为eType类型的内存空间,相当于数组容量为capacitylist->capacity = capacity;list->size = 0;}void destroyTable(SequentialTable* list) {//销毁顺序表delete[] list->elements;//将elements内存空间销毁
}int getSize(SequentialTable* list) {//顺序表长度return list->size;
}bool isEmpty(SequentialTable* list) {//顺序表是否为空return list->size == 0;
}void insertElement(SequentialTable* list,int index, eType x) {//插入元素 ,index为插入位置,x为插入的元素if (index<0 || index>list->size) {throw std::invalid_argument("Invalid index");//插入位置非法那么抛出异常}if (list->size == list->capacity) {//如果顺序表长度大于容量那就扩容int newCapacity = 2 * list->capacity;//容量扩大为原来的两倍eType* newElements = new eType[newCapacity];for (int i = 0; i < list->size; i++) {newElements[i] = list->elements[i];}delete[] list->elements;//释放原来内存空间list->elements = newElements;list->capacity = newCapacity;}for (int i = list->size; i > index; i--) {list->elements[i] = list->elements[i - 1];}list->elements[index] = x;list->size++;//注意插入元素,长度加一
}void deleteElement(SequentialTable* list, int index) {if (index < 0 || index >= list->size) {throw std::invalid_argument("Invalid index");}if (list->size == 0) {//如果顺序表没有元素那么进行不了删除操作,抛出异常throw std::invalid_argument("Invalid index");}for (int i = index; i < list->size - 1; i++) {list->elements[i] = list->elements[i + 1];}list->size--;//长度减一
}int findElement(SequentialTable* list, eType x) {//找出元素的索引for (int i = 0; i < list->size; i++) {if (x == list->elements[i])return i;}return -1;//找不到返回-1
}eType getElement(SequentialTable* list, int index) {//返回索引对应的元素if (index < 0 || index >= list->size) {throw std::invalid_argument("Invalid index");}return list->elements[index];
}void updateElement(SequentialTable* list, int index, eType x) {//更新元素if (index < 0 || index >= list->size) {throw std::invalid_argument("Invalid index");}list->elements[index] = x;
}int main() {//测试代码SequentialTable st;initailizeTable(&st, 10);for (int i = 0; i < 10; i++) {insertElement(&st, i, i * 10);}deleteElement(&st, 0);cout << st.elements[0] << endl;insertElement(&st, 0, 0);cout << st.elements[0] << endl;cout << isEmpty(&st) << endl;cout << findElement(&st, 70) << endl;cout << getElement(&st, 7) << endl;updateElement(&st, 0, 1);cout << st.elements[0] << endl;return 0;
}

八、使用顺序表的经典例题

1.求奇数的乘积

(帅哥们这个蓝色字体可以点进去看原题)

代码题解

#include<iostream>
using namespace std;#define eType intstruct SequentialTable {eType* elements;int size;int capacity;
};void initailizeTable(SequentialTable* list, int capacity) {//1.初始化顺序表list->elements = new eType[capacity];//elements申请内存为eType类型的内存空间,相当于数组容量为capacitylist->capacity = capacity;list->size = 0;}void destroyTable(SequentialTable* list) {//销毁顺序表delete[] list->elements;//将elements内存空间销毁
}int getSize(SequentialTable* list) {//顺序表长度return list->size;
}bool isEmpty(SequentialTable* list) {//顺序表是否为空return list->size == 0;
}void insertElement(SequentialTable* list,int index, eType x) {//插入元素 ,index为插入位置,x为插入的元素if (index<0 || index>list->size) {throw std::invalid_argument("Invalid index");//插入位置非法那么抛出异常}if (list->size == list->capacity) {//如果顺序表长度大于容量那就扩容int newCapacity = 2 * list->capacity;//容量扩大为原来的两倍eType* newElements = new eType[newCapacity];for (int i = 0; i < list->size; i++) {newElements[i] = list->elements[i];}delete[] list->elements;//释放原来内存空间list->elements = newElements;list->capacity = newCapacity;}for (int i = list->size; i > index; i--) {list->elements[i] = list->elements[i - 1];}list->elements[index] = x;list->size++;//注意插入元素,长度加一
}void deleteElement(SequentialTable* list, int index) {if (index < 0 || index >= list->size) {throw std::invalid_argument("Invalid index");}if (list->size == 0) {//如果顺序表没有元素那么进行不了删除操作,抛出异常throw std::invalid_argument("Invalid index");}for (int i = index; i < list->size - 1; i++) {list->elements[i] = list->elements[i + 1];}list->size--;//长度减一
}int findElement(SequentialTable* list, eType x) {//找出元素的索引for (int i = 0; i < list->size; i++) {if (x == list->elements[i])return i;}return -1;//找不到返回-1
}eType getElement(SequentialTable* list, int index) {//返回索引对应的元素if (index < 0 || index >= list->size) {throw std::invalid_argument("Invalid index");}return list->elements[index];
}void updateElement(SequentialTable* list, int index, eType x) {//更新元素if (index < 0 || index >= list->size) {throw std::invalid_argument("Invalid index");}list->elements[index] = x;
}int main() {//测试代码int n;while (cin >> n) {SequentialTable s;initailizeTable(&s, 1);for (int i = 0; i < n; i++) {int x;cin >> x;insertElement(&s, i, x);}int ret = 1;for (int i = 0; i < s.size; i++) {int val = getElement(&s, i);if (val & 1)ret *= val;}cout << ret << endl;}return 0;
}

2.数值统计

(帅哥们这个蓝色字体可以点进去看原题)

代码题解

#include<iostream>
using namespace std;#define eType double//元素类型struct SequentialTable {eType* elements;int size;int capacity;
};void initailizeTable(SequentialTable* list, int capacity) {//1.初始化顺序表list->elements = new eType[capacity];//elements申请内存为eType类型的内存空间,相当于数组容量为capacitylist->capacity = capacity;list->size = 0;}void destroyTable(SequentialTable* list) {//销毁顺序表delete[] list->elements;//将elements内存空间销毁
}int getSize(SequentialTable* list) {//顺序表长度return list->size;
}bool isEmpty(SequentialTable* list) {//顺序表是否为空return list->size == 0;
}void insertElement(SequentialTable* list,int index, eType x) {//插入元素 ,index为插入位置,x为插入的元素if (index<0 || index>list->size) {throw std::invalid_argument("Invalid index");//插入位置非法那么抛出异常}if (list->size == list->capacity) {//如果顺序表长度大于容量那就扩容int newCapacity = 2 * list->capacity;//容量扩大为原来的两倍eType* newElements = new eType[newCapacity];for (int i = 0; i < list->size; i++) {newElements[i] = list->elements[i];}delete[] list->elements;//释放原来内存空间list->elements = newElements;list->capacity = newCapacity;}for (int i = list->size; i > index; i--) {list->elements[i] = list->elements[i - 1];}list->elements[index] = x;list->size++;//注意插入元素,长度加一
}void deleteElement(SequentialTable* list, int index) {if (index < 0 || index >= list->size) {throw std::invalid_argument("Invalid index");}if (list->size == 0) {//如果顺序表没有元素那么进行不了删除操作,抛出异常throw std::invalid_argument("Invalid index");}for (int i = index; i < list->size - 1; i++) {list->elements[i] = list->elements[i + 1];}list->size--;//长度减一
}int findElement(SequentialTable* list, eType x) {//找出元素的索引for (int i = 0; i < list->size; i++) {if (x == list->elements[i])return i;}return -1;//找不到返回-1
}eType getElement(SequentialTable* list, int index) {//返回索引对应的元素if (index < 0 || index >= list->size) {throw std::invalid_argument("Invalid index");}return list->elements[index];
}void updateElement(SequentialTable* list, int index, eType x) {//更新元素if (index < 0 || index >= list->size) {throw std::invalid_argument("Invalid index");}list->elements[index] = x;
}int main() {//测试代码int n;while (cin >> n&&n) {SequentialTable s;initailizeTable(&s, 1);for (int i = 0; i < n; i++) {eType x;cin >> x;insertElement(&s, i, x);}int pcnt = 0, zcont = 0, ncnt = 0;for (int i = 0; i < s.size; i++) {eType val = getElement(&s, i);if (val > 1e-8) pcnt++;else if (val < -1e-8) ncnt++;else zcont++;}cout << ncnt << " " << zcont << " " << pcnt << endl;}return 0;
}

九、总结

综上所述,顺序表是一种基于数组实现的线性数据结构,具有随机访问速度快、物理存储连续等优点。然而,它也存在插入和删除操作效率低、扩容操作耗时等缺点。因此,在选择数据结构时,需要根据具体的应用场景和需求来权衡利弊。

结语

学习编程是一个很艰难,漫长的过程,我们要克服一切困难,学习算法本就是由易到难,不会的地方就问,我相信通过我们坚持不懈的努力一定能理解并熟练掌握其中细节,加油,我相信你一定能行。
在这里插入图片描述
想看更多内容可以关注我,看我作品,关注我让我们一起学习编程,希望大家能点赞关注支持一下,让我有持续更新的动力,谢谢大家。
在这里插入图片描述

http://www.yayakq.cn/news/212325/

相关文章:

  • 网站建设的第三方平台网站建设 中标公告
  • 知乎 php网站开发书籍网站建设标准合同
  • 上海网站科技餐饮招商加盟网站建设费用
  • 网站开发有哪些竞赛湖南建筑信息网首页
  • 案例 网站即给做网站又给我们做推广的公司呢
  • 网站建站平台开发服务5元域名免备案
  • 怎么建设一个网站赚钱淘宝客网站源码和模版有什么区别
  • 济宁建设网站怎么把产品放到网上销售
  • iis7 静态网站织梦做的网站首页打不开
  • 买了域名怎么做网站旅游网站怎么制作
  • 站长工具查询官网河北邢台刚刚发布的紧急通知
  • 网站制作用什么语言wordpress弹出式注册页面
  • 推广网站的软文网站如何建立
  • 网站的百度地图怎么做邯郸网站开发公司
  • 网站建设可研报告提高网站浏览量
  • 北京网站制作计划上海网站快速排名优化
  • 永康城乡建设局网站珠海网站开发排名
  • 百度做网站骗人到哪里去投诉dz网站地图怎么做
  • .net 网站关键字设计上海网站建设
  • 做基础网站主机要吴桥做网站价格
  • 营销网站特点可以搜任何网站的浏览器
  • 昆明网站制作计划网络广告的形式
  • 厦门教育平台网站建设怎样把自己的网站做推广
  • 简单建优化网站无需技术商务网页设计与制作 百度百科
  • 沈阳网站公司排名平台搭建心得
  • 可视化编辑网站开发安阳网站设计公司
  • 深圳网站建设三把火科技买完域名后怎么做网站
  • 网站seo专员免费的短视频app有哪些
  • h5网站和响应式网站区别常见的网站推广方法
  • 北京网站推广公司平泉建设局网站