IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 数据结构第二章学习 -> 正文阅读

[C++知识库]数据结构第二章学习

顺序表#

用顺序结构的方式实现线性表的顺序存储。把逻辑上相邻的元素存储在物理地址位置上也相邻的存储单元中。
顺序表的实现,静态分配

#include<iostream>
#define Maxsize 10//定义最大长度
using namespace std;
typedef struct {
	int data[Maxsize];//用静态“数组”存放数据元素
	int lengh;//顺序表长度定义
}SqList;//顺序表类型定义
//初始化一个顺序表
void InitList(SqList&L) {
	for (int i = 0; i < Maxsize; i++)
		L.data[i] = 0;//所有元素设置为初始值
	L.lengh = 0;//长度初始化为0
}
int main()
{
	SqList L;
	InitList(L);
	for (int j = 0; j< Maxsize; j++)
	{
		cout<< L.data[j]<< endl;
	}
	system("pause");
	return 0;
}

正规情况,上述输出一般不会被实行,因为我们定义了lengh,违规访问大于lengh的元素是不合理的。一般情况应该用基本操作来实现。
顺序表的实现,动态分配
在这里插入图片描述动态案例

#include<iostream>
#include<stdlib.h>
//动态存储
#define Initsize 10;
typedef struct {
	int Maxsize=Initsize;
	int *data;
	int length;
}SqList;
void InitList(SqList &L);
void Increasesize(SqList &L, int len);
int main() {
	SqList L;
	InitList(L);
	Increasesize(L,5);
	system("pause");
	return 0;
}
void InitList(SqList &L) {
	L.data = (int*)malloc(L.Maxsize * sizeof(int));
	//L.data =  new int[L.Maxsize];
	L.length = 0;
	L.Maxsize = Initsize;
}
void Increasesize(SqList &L,int len) {
	int *p = L.data;
	L.data = (int*)malloc((L.Maxsize + len) * sizeof(int));
	for (int i = 0; i < L.length; i++) {
		L.data[i] = p[i];
	}
	L.Maxsize = L.Maxsize + len;
	free(p);
	//delete();
}

顺序表的特点
1.随机访问,即可以在O(1)时间内找到第i个元素。
2.存储密度高,每个节点只存储数据元素。
3.拓展容量不方便。

顺序表的插入和删除##

顺序表的插入,先将要插入的位置以及之后的数据向后移动,然后在此处插入元素,基本代码如下:

void ListInsert(SqList &L,int i,int e){
for(int j=L.length;j<i;j--)
{L.data[j]=L.data[j-1];//向顺序表插入,因为使用数组,所以实际插入时要i-1
L.data[i-1]=e;
L.length++;
}
}

上述代码的健壮性不高,因为没有对i进行判断,使1<i<L.length+1,并且应判断L.length是否大于最大长度,可留作练习后面自行判断。
顺序表的删除
在这里插入图片描述时间复杂度:
最好情况:删除表尾,不需要移动其他元素,i=n,循环0次,最好时间复杂度为O(1);
最坏情况:删除表头,循环n次,时间复杂度为O(n);
平均时间复杂度:删除任意一个地方的元素概率相同,p=1/n;平均循环次数=(n-1)p+(n-2)p+…1p=n(n-1)/2n=(n-)/2
时间复杂度为O(n);

顺序表查找##

在这里插入图片描述在这里插入图片描述

顺序表的查找过程中,条件语句用于判断所查找的值是否在顺序表中,可以直接用“= =”来进行条件判断,一般考研中如果没有明确说明大纲的使用语言,这种类似伪代码的代码形式是可以的,但是其不够严谨,因为“==”不能判断类似结构体这种的数据类型,如果要求语言类别,应该尽量使用相应的语言去完善代码,从而保证代码的健壮性。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-04-14 23:31:36  更:2022-04-14 23:34:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:10:52-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码