线性表间接寻址

目录

类定义:

构造函数与析构函数 :

查找Find(int k, T & x):

寻找  Search(const T & x):

插入 Insert(int k, const T & x):

输出函数:

测试函数:

测试结果:

声明代码


来看下间接寻址的基本概念吧:

       间接寻址(indirect addressing)是公式化描述和链表描述的组合。采用这种描述方法,可以保留公式化描述方法的许多优点——可以根据索引在 ( 1 )的时间内访问每个元素、可采用二叉搜索方法在对数时间内对一个有序表进行搜索等等。与此同时,也可以获得链表描述方法的重要特色——在诸如插入和删除操作期间不必对元素进行实际的移动。因此,大多数间接寻址链表操作的时间复杂性都与元素的总数无关.
       基本理论图:

类定义:

/*
数组结构中的线性表样式 间接寻址对应书中代码:数据结构算法与应用c++描述程序编写:比卡丘不皮编写时间:2020年7月6日 10:45:02
*/
#pragma once#include <iostream>
#include "all_error.h"using namespace std;template<class T>
class indirectList
{
public:indirectList(int MaxListSize = 10);~indirectList();bool isEmpty()const { return length == 0; }int Length() const { return length; }bool Find(int k, T &x) const;         //查找第k可的数据,没有为falseint Search(const T & x) const;        //查找数据函数indirectList<T> & Delete(int k, T & x); //删除函数indirectList<T> & Insert(int k, const T& x); //插入函数void Output(ostream & out)const;
private:T **table;int length, MaxSize;
};

构造函数与析构函数 :

template<class T>indirectList<T>::indirectList(int MaxListSize)
{     //构造函数MaxSize = MaxListSize;table = new T *[MaxSize];length = 0;
}template<class T>
indirectList<T>::~indirectList()
{//析构函数for (int i = 0; i < length; i++){delete table[i];}delete[] table;
}

 查找Find(int k, T & x):

template<class T>
bool indirectList<T>::Find(int k, T & x) const
{if (k < 1 || k>length){return false;}x = *table[k - 1];return true;
}

寻找  Search(const T & x):

template<class T>
int indirectList<T>::Search(const T & x) const
{for (int i = 1; i < length; i++){if (*table[i-1] == x){return i;}}return 0;
}

插入 Insert(int k, const T & x):

indirectList<T>& indirectList<T>::Insert(int k, const T & x)
{if (k<0 || k > length){throw OutOfBounds();}if (length == MaxSize){throw Noman();}//向后移动一位for (int i = length - 1; i >= k; i--){table[i + 1] = table[i];}table[k] = new T;*table[k] = x;length++;return *this;
}

输出函数:

template<class T>
void indirectList<T>::Output(ostream & out) const
{for ( int i = 0; i<length; i++){out << *table[i] << " ";}
}//重载 <<template<class T>
ostream & operator<<(ostream & out, const indirectList<T> & x)
{x.Output(out);return out;
}

测试函数:

void testindirectList()
{indirectList<int> indert;cout << "测试构造函数对应的数据" << endl;cout << "长度: " << indert.Length() << endl;cout << "链表数据: " << indert << endl;cout << endl;cout << "测试插入函数: 插入数据 Insert(1,1).Insert(2,2).Insert(3,3):"<< indert.Insert(0, 1).Insert(1, 2).Insert(2, 3) << endl;cout << "Insert(1, 6) " << indert.Insert(1, 6);cout << endl;//测试删除函数int x;indert.Delete(1, x);cout << "Delete(1, x): " << x << endl;cout << "链表数据: " << indert << endl;cout << endl;//find indert.Find(2, x);cout << "链表数据: " << indert << endl;cout << "Find(2, x): " << x << endl;//测试Search函数cout << "Search(2) " << indert.Search(2) << endl;}

测试结果:

声明代码 

本章例子代码为《数据结构与算法 c++描述 第3版》中的间接寻址代码,这里没有添加一些代码。

喜欢的朋友可以关注我,一起进步。

(1小时数据结构)数据结构c++描述(三)--- 线性表间接寻址相关推荐

  1. 数据结构与算法笔记(二) 线性表(数组描述)

    c++常用的数据描述方法是数组描述和链式描述,线性表可以用来说明这两方法,先介绍数组描述的线性表.后面再介绍链式描述的线性表. C++ STL容器vector和list相当于线性表的数组描述和链式描述 ...

  2. 《大话数据结构》| 第3章 线性表

    目录 3.2 线性表的定义 3.3 线性表的抽象数据类型 3.4 线性表的顺序存储结构 3.4.1 顺序存储定义 3.4.2 顺序存储方式 3.4.3 数据长度与线性表长度的区别 3.4.4 地址计算 ...

  3. 数据结构(C语言)——线性表(定义,基本操作)

    数据结构(C语言)--线性表(定义,基本操作) 一. 线性表的定义 二.线性表的基本操作 什么时候要传入引用"==&=="----对参数的修改结果需要"==带回来 ...

  4. C语言数据结构线性表上机实验报告,数据结构实验报告实验一线性表_图文

    数据结构实验报告实验一线性表_图文 更新时间:2017/2/11 1:23:00  浏览量:763  手机版 数据结构实验报告 实验名称: 实验一 线性表 学生姓名: 班 级: 班内序号: 学 号: ...

  5. 数据结构 严蔚敏 第二章 线性表

    数据结构 严蔚敏 第二章 线性表 线性表:由n个(n>=0)数据特征相同的元素构成的有限序列. 线性表的类型定义表示和实现 顺序表 存储单元地址连续 随机存取 若每个元素占用 m 个存储单元,以 ...

  6. 数据结构实验1《基于线性表的图书管理系统》

    数据结构实验1<基于线性表的图书管理系统> (visual studio 2019可运行) 输入及输出要求见<数据结构C语言(第二版)>严蔚敏版 [本文仅用于啥都看不懂还想交作 ...

  7. 2022天勤考研数据结构笔记 第2章 线性表

    2022天勤考研数据结构笔记 第2章 线性表(更新中) 第2章 线性表 2.1 结构体定义 2.2 顺序表 2.3 单链表 2.4 双链表 2.5 循环链表 2.6 逆置问题(408重要考点) 第2章 ...

  8. 数据结构笔记(一) 线性表(C语言描述)

    数据结构(一) 线性表 顺序表 存储结构 #define ElemType int #define MAXSIZE 100 typedef struct{ElemType *elem;//初始地址in ...

  9. C语言数据结构(大话数据结构——笔记1)数据结构绪论、算法、线性表

    [C语言描述]<数据结构和算法> 说是这个教程是按照<大话数据结构>这本书来编写的:数据结构与算法经典书籍--大话数据结构(带配套源码) ↑废话太TM多了,换一个! [搞定数据 ...

  10. 【数据结构与算法】之线性表的应用和操作

    数据结构概念 数据结构:是相互之间存在一种或多种特定关系的数据元素的集合. 数据结构的逻辑结构:数据对象中数据元素之间的相互关系,分为线性结构.树形结构.图形结构以及集合结构. 数据结构的物理结构:数 ...

最新文章

  1. 计算机 大学活动 游戏,朝花夕拾”——中国矿业大学计算机学院积极举办“那些年我们一起玩过的游戏”活动...
  2. 鸿蒙系统海外名称,新商标表明华为鸿蒙系统在海外或叫做“Harmony OS”
  3. 2013电赛总结【西电专用】
  4. Unix下5种I/O模型
  5. 网络配置辅导:多路由器如何使用多条ADSL线路
  6. Vue音乐项目笔记(三)
  7. 第12章第1讲位运算符与表达式
  8. python math库基本函数
  9. 使用Clip Converter网站下载Yotube视频
  10. decay_rate, decay_steps ,batchsize,iteration,epoch
  11. 玩转算法与数据结构 C++描述 选择排序
  12. ROS:bag数据包内容提取——雷达点云数据和imu数据
  13. 组装一台台式计算机的流程,如何组装电脑?组装电脑的操作流程!
  14. iqoo手机可以刷鸿蒙系统吗,华为老机型可以更新鸿蒙系统么-华为哪些老机型支持鸿蒙系统...
  15. C++ 没有找到接受const _Ty类型的左操作数的运算符
  16. USB device和USB host
  17. RNA 1. SCI 文章中读取 GEO 数据
  18. 地名翻译混乱 广东省质监局出台规范
  19. RabbitMQ与AMQP协议详解
  20. C#并发编程相关名词解释

热门文章

  1. PCIe总线的参考时钟与同步时钟的差异
  2. 【转】博弈论——acm
  3. 操作系统——进程管理
  4. cocos creator之自定义事件
  5. 竞争型神经网络:自组织映射神经网络(SOM)
  6. 计算机地图制图pdf,计算机地图制图(资料).pdf
  7. 给MK802(USB大小的Android4.0小PC)引出串口信号,变成ARM开发版
  8. 【LaTeX入门】02、CJK环境讲解
  9. java 中文转拼音_Java实现汉字转换拼音功能
  10. flutter ScrollController attached to multiple scroll views