第一百零五天学习记录:数据结构与算法基础:顺序表(王卓教学视频)

注:笔记截图均来自王卓数据结构教学视频

线性表的定义和特点

线性表是具有相同特性的数据元素的一个有限序列
在这里插入图片描述
在这里插入图片描述
同一线性表中的元素必定具有相同特性,数据元素间的关系是线性关系。

线性表的逻辑特征

在这里插入图片描述

稀疏多项式的运算

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

顺序存储结构存在的问题

1、存储空间分配不灵活
2、运算的空间复杂度高

引出链式存储结构:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

小结

1、线性表中数据元素的类型可以为简单类型,也可以为复杂类型。
2、许多实际应用问题所涉的基本操作有很大相似性,不应为每个具体应用单独编写一个程序。
3、从具体应用中抽象出共性的逻辑结构和基本操作(抽象数据类型),然后实现其存储结构和基本操作。

线性表的类型定义

抽象数据类型线性表的定义如下:
在这里插入图片描述

基本操作

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

线性表的顺序表示和实现

在计算机内,线性表有两种基本的存储结构:
顺序存储结构和链式存储结构。

线性表的顺序存储表示

线性表的顺序表示又称为顺序存储结构或顺序映像。
顺序存储定义:把逻辑上相邻的数据元素存储在物理上相邻的存储单元中的存储结构。
在这里插入图片描述
线性表的第1个数据元素a1的存储位置,称作线性表的起始位置或基地址。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

多项式的顺序存储结构类型定义

在这里插入图片描述

图书表的顺序存储结构类型定义

在这里插入图片描述

线性表的顺序存储表示

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

顺序表基本操作的实现

在这里插入图片描述
在这里插入图片描述
以下根据教学视频用C++实现:
BOOK对象和HOME对象的建立:

class Book
{
public:string Name;
};class Home
{
public:Home();~Home();void ClearBook();int ShowBookAmount();void addBook();void showBook();Book* bookarr;int length;int Maxlength;
};

在这里插入图片描述

Home::Home()
{cout << "Home构造函数执行" << endl;length = 0;//此处应该是从数据库读取数据,但本次案例不考虑数据库,因此直接初始化成0int Maxlength = 6;while (length>Maxlength){Maxlength += 3;//因为是动态存储,这里表示如果初始的Book数量超过了Maxlength,则增加Maxlength直到不再超过}bookarr = new Book[Maxlength];cout << "Home构造函数为Book建了空间数:"<< Maxlength << endl;
}

在这里插入图片描述

Home::~Home()
{cout << "Home析构函数执行" << endl;if (bookarr != NULL){delete[] bookarr;}
}

在这里插入图片描述

void Home::ClearBook()
{length = 0;
}

在这里插入图片描述

int Home::ShowBookAmount()
{return length;
}

因为老师只实现了几个典型的函数后就没有讲解,因此这里也不做过多的设计。
实现功能输出如下:
在这里插入图片描述
源代码:

/*`cin.ignore(numeric_limits<streamsize>::max(), '\n')`用于清除输入缓冲区中的字符,直到遇到换行符为止。
具体解释如下:
1.cin.ignore(numeric_limits<streamsize>::max(), '\n')`表示使用`cin.ignore()`函数来忽略输入缓冲区中的字符。
2.numeric_limits<streamsize>::max()`表示在忽略字符的数量上没有限制,可以忽略输入缓冲区中的所有字符。
3.'\n'`是指定要忽略的字符,即换行符。
通常,在用户输入不正确的内容后,我们需要清除输入缓冲区中的残留字符,以避免对后续输入产生干扰。
使用这行代码可以确保输入缓冲区中的所有无效字符都被忽略直到遇到换行符为止。这样,程序可以继续等待用户的新输入。*/#include<iostream>
using namespace std;
#include<string>class Book
{
public:string Name;
};class Home
{
public:Home();~Home();void ClearBook();int ShowBookAmount();void addBook();void showBook();Book* bookarr;int length;int Maxlength;
};Home::Home()
{cout << "Home构造函数执行" << endl;length = 0;//此处应该是从数据库读取数据,但本次案例不考虑数据库,因此直接初始化成0Maxlength = 6;while (length>Maxlength){Maxlength += 3;//因为是动态存储,这里表示如果初始的Book数量超过了Maxlength,则增加Maxlength直到不再超过}bookarr = new Book[Maxlength];cout << "Home构造函数为Book建了空间数:"<< Maxlength << endl;
}Home::~Home()
{cout << "Home析构函数执行" << endl;if (bookarr != NULL){delete[] bookarr;}
}void Home::ClearBook()
{length = 0;
}int Home::ShowBookAmount()
{return length;
}void Home::addBook()
{string bname;cout << "请输入书名:" << endl;cin >> bname;if (length >= Maxlength){Maxlength += 3;cout << "书库已满……进行扩容->Maxlength将扩容至:" << Maxlength << endl;Book* temp = new Book[Maxlength];for (int i = 0; i < length; ++i){temp[i] = bookarr[i];}if (bookarr != NULL){cout << "delete[] bookarr" << endl;delete[] bookarr;}cout << "new Book[Maxlength]" << endl;bookarr = new Book[Maxlength];for (int i = 0; i < length; ++i){bookarr[i] = temp[i];}if (temp != NULL){cout << "delete[] temp" << endl;delete[] temp;}length += 1;bookarr[length - 1].Name = bname;}else{length += 1;bookarr[length - 1].Name = bname;}
}void Home::showBook()
{for (int i = 0; i < length; ++i){cout << "图书" << (i + 1) << " :" << bookarr[i].Name << endl;}
}void showTable()
{cout << "*************************************************" << endl;cout << "********** 图   书   管   理   系   统 **********" << endl;cout << "*************************************************" << endl;cout << "**********  1、查询数量   2、清空书库  **********" << endl;cout << "**********  3、添加书籍   4、显示书籍  **********" << endl;cout << "**********  5、待定待定   6、待定待定  **********" << endl;cout << "**********  7、刷新屏幕   0、退出系统  **********" << endl;cout << "*************************************************" << endl;
}int main()
{showTable();Home home;int pushnum;int bookamount;do {int availableChars = (int)cin.rdbuf()->in_avail();if (availableChars) {cin.ignore(numeric_limits<streamsize>::max(), '\n');}cout << "请输入您要进行的操作>=" << endl;cin >> pushnum;if (cin.fail()) {cout << "您输入的不是一个整数,请重新输入:" << endl;cin.clear();cin.ignore(numeric_limits<streamsize>::max(), '\n');continue;}if (pushnum < 0 || pushnum>7){cout << "您输入数字不合要求:" << pushnum << endl;continue;}switch (pushnum){case 1:bookamount = home.ShowBookAmount();cout << "当前书库书籍数量为:" << bookamount << endl;break;case 2:cout << "执行清空书库操作……" << endl;home.ClearBook();break;case 3:cout << "执行添加书籍操作……" << endl;home.addBook();break;case 4:cout << "执行显示书籍操作……" << endl;home.showBook();break;case 5:break;case 6:break;case 7:system("cls");showTable();break;default:break;}} while (pushnum);cout << "欢迎下次使用,再见……" << endl;return 0;
}

顺序表基本操作的实现

在这里插入图片描述

顺序表上的查找操作

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

顺序表的查找算法分析:

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
顺序表插入算法的平均时间复杂度为O(n)。

顺序表的删除

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
顺序表删除算法的平均时间复杂度为O(n)。

顺序表(线性表的顺序存储结构)的特点

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

顺序表优缺点

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/19987.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

k8s 中的卷

前面的文章我们分享了 pod &#xff0c;RC&#xff0c;RS&#xff0c;DaemonSet&#xff0c;CJ&#xff0c;Service 等各种资源 今天我们来分享一波如何将磁盘挂载到容器中&#xff0c;在 docker 里面这种技术叫做 数据卷&#xff0c;感兴趣的小伙伴可以查看一下文章&#xff…

TypeScript 学习笔记(二):接口与类型别名、字面量类型

一、接口的定义 在面向对象的编程中&#xff0c;接口是一种规范的定义&#xff0c;它定义了行为和动作的规范&#xff0c;在程序设计里面&#xff0c;接口起到一种限制和规范的作用。接口定义了某一批类所需要遵守的规范&#xff0c;接口不关心这些类的内部状态数据&#xff0…

MySQL内外连接

目录 内连接 外连接 左外连接 右外连接 内连接 内连接实际上就是利用 where 子句对两种表形成的笛卡儿积进行筛选 select 字段 from 表 1 inner join 表 2 on 连接条件 and 其他条件 显示SMITH的名字和部门名称 使用inner join 写法上是基本类似的。 外连接 左外…

如何使用ChatGPT制作免费的数字人

传统的数字人制作过程 制作属于自己的免费的数字人是一个复杂的过程&#xff0c;需要涉及多个方面的知识和技术。以下是一个大致的步骤指南&#xff0c;以帮助你开始这个过程&#xff1a; 1. 确定数字人的目标和设计&#xff1a;首先&#xff0c;你需要确定数字人的用途和目标…

校园跑腿小程序都包括哪些业务呢?

校园创业&#xff0c;大家都知道&#xff0c;一直以来是个非常火热的话题&#xff0c;每位步入大学校园的学子们都有过在校创业的想法&#xff0c;包括我们一些有着学校资源的社会创业者们&#xff0c;早已经看好了中国高校这块巨大的市场。 在这里&#xff0c;我要跟大家分享…

kubernetes 1.27.3 集群部署方案

一、准备环境 1.1 Kubernetes 1.27.3 版本集群部署环境准备 1.1.1 主机硬件配置说明 cpu内存硬盘角色主机名系统版本 8C 8G 1024GB master master01 centos 7.9 8C 16G 1024GB worker(node) worker01 centos 7.9 8C 16G 1024GB worker(node) worker…

3. MySQL - 数据类型 选项约束

目录 回顾 1. 命令行下的 MySql 客户端 2. 图形化界面的 MySQL-Client 3. 数据库概述 3.1 数据库管理系统是什么 3.2 工作模式 3.3 RDBMS 管理数据的结构 3.4 客户端连接服务器的信息 4. MySQL 中的数据类型 4.1 整型类型 4.2 字符串 4.3 日期/时间 5. MySQL 每个字…

阿里云容蓓:DCDN 助力云原生时代的应用构建及最佳实践

在数字化转型速度不断提升的今天&#xff0c;大带宽、低时延、高并发的场景不断涌现&#xff0c;内容分发网络(Content Delivery Network&#xff0c;CDN)应用需求还在不断攀升&#xff0c;打造更高质量的CDN服务将成为新时代产业竞争的关键所在。亚太CDN峰会自2012年第一届以来…

mac安装Golang开发环境及入门

目录 一、Mac brew 安装go环境 1.1 安装步骤 1.2 设置GOPATH 及环境变量 1.3 编写第一个go程序 二、快速入门 1.1 快速入门需求 1.2 go学习&#xff08;自用&#xff09; 一、Mac brew 安装go环境 1.1 安装步骤 1&#xff09;终端输入&#xff0c;也可以指定下载go版本…

Hadoop 3.2.4 本机伪分布式安装

Hadoop 3.2.4 伪分布式安装 文章目录 Hadoop 3.2.4 伪分布式安装前言配置ssh免密登录下载安装包解压并调整配置文件解压安装包到当前位置调整配置文件hadoop-env.shyarn-env.shcore-site.xmlhdfs-site.xmlmapred-site.xmlyarn-site.xmlworkers 配置 启动验证启动与命令查验web页…

高并发的哲学原理(一)-- 找出单点,进行拆分

人列计算机 《三体》中&#xff0c;刘慈欣设计了一个用人进行二进制运算的计算机&#xff0c;使用了三千万名士兵(晶体管)&#xff1a; 计算机名&#xff1a;秦一号 CPU&#xff1a;秦始皇最精锐的五个军团 挥舞旗帜进行二进制运算 用三个士兵来组成与门、或门、与非门、或非门…

Python GUI编程利器:Tkinker中的消息对话框(13)

小朋友们好&#xff0c;大朋友们好&#xff01; 我是猫妹&#xff0c;一名爱上Python编程的小学生。 和猫妹学Python&#xff0c;一起趣味学编程。 今日目标 学习Tkinter中的消息对话框的使用&#xff0c;实现如下效果&#xff1a; 文本消息对话框 可以通过showinfo()创建文…