之前学过,数据描述方法中有公式化描述,链表描述,间接寻址和模拟指针,在之前已经将公式化描述和链表描述通过代码的形式展现出来了,现在贴出简介寻址的代码。其中简介寻址是融合了公式化描述和链表描述的有点,使用一个指针表来记录数据的位置,指针表相当于一个数组,这样在插入,删除的时候,其中的数据的位置并没有发生变化,而仅仅就是指针表的指向发生了变化,同时很多操作又能像公式化一样通过O(1)的复杂度进行操作。下面贴出我的代码:
其中的Exception.h请参考之前的代码:

#ifndef _INDIRECT_H_
#define _INDIRECT_H_#include "Exception.h"
#include <iostream>template<class T>
class IndirectList{
public:IndirectList(int MaxListSize=10);~IndirectList();/*如果length=0,则链表为空*/bool isEmpty() const{return length == 0;}/*返回链表的长度*/int Length() const {return length;}/*看能否找到第k个元素,找到后给x赋值*/bool Find(int k,T& x) const;/*找到元素是x的元素的位置*/int Search(const T& x) const;/*从链表中删除第k个元素,并赋值给x*/IndirectList<T>& Delete(int k,T& x);/*在链表的第k个位置插入元素x*/IndirectList<T>& Insert(int k,const T& x);/*打印输出整个链表*/void print();
private:int length;  //链表的长度int MaxSize;  //链表的最大长度T **table;     //模拟指针表
};template<class T>
IndirectList<T>::IndirectList(int MaxListSize)
{this->MaxSize = MaxListSize;  //获取最大长度table = new T*[MaxSize];  //初始化模拟指针length = 0;     //设置当前长度为0
}template<class T>
IndirectList<T>::~IndirectList()
{for(int i = 0;i < length;i++)delete table[i];  //删除模拟指针delete [] table;
}template<class T>
bool IndirectList<T>::Find(int k, T &x) const
{if(k < 1 || k > length)throw OutOfBounds();   //越界了x = *table[k-1];return true;
}template<class T>
IndirectList<T>& IndirectList<T>::Delete(int k, T &x)
{if(Find(k,x)){for(int i = k;i < length;i++) {/*第k个元素之后的元素向前移动一个*/table[i-1] = table[i];}length--;  //当前长度减一return *this;}else{throw OutOfBounds();}
}template<class T>
IndirectList<T>& IndirectList<T>::Insert(int k, const T &x)
{if(k < 0 || k > length)throw OutOfBounds();  //越界if(length == MaxSize)throw NoMem();  //已经到达最大长度了for(int i = length-1;i >= k;i--){/*第k个元素之后的元素向后移动一位*/table[i+1] = table[i];}/*** 新建一个间接地址*/table[k] = new T;*table[k] = x;length++;return *this;
}template<class T>
int IndirectList<T>::Search(const T &x) const
{for(int i = 0;i < length;i++){if(*table[i] == x){return i+1;}}return -1;
}/*** 打印输出整个链表的内容*/
template<class T>
void IndirectList<T>::print()
{for(int i = 0;i < length;i++){std::cout << *table[i] << " ";}std::cout << std::endl;
}#endif

代码相对来说比较简单,只不过其中比较难懂的就是
T** table,其中table指向的是T**,
table指向的是T,也就是数据T的地址,由此可知table指向的是数据的地址的地址,进行一个间接寻址,这个类似于计算机组成原理上的简介寻址。
好好体会一下,就会明白的!!加油!!

转载于:https://www.cnblogs.com/bobo1223/p/7287639.html

C++实现的间接寻址相关推荐

  1. 与数据相关的运算符和伪指令 offset align ptr type lengthof sizeof label 间接寻址 间接操作数 数组 变址操作数 指针 jmp, loop

    与数据相关的运算符和伪指令 offset 数据标号的偏移量,按字节计算,表示数据标号到数据段开始的距离 .data bVal byte ? wVal word ? dVal dword ? dVal2 ...

  2. 间接寻址级别不同_详解西门子间接寻址之地址寄存器间接寻址

    关于间接寻址分为存储器间接寻址和地址寄存器间接寻址,本文主要针对地址寄存器间接寻址进行详细讲解,关于存储器间接寻址可参见前面文章,链接如下: #详解西门子间接寻址之存储器间接寻址 [地址寄存器间接寻址 ...

  3. C++ 指向指针的指针(多级间接寻址)

    C++ 指向指针的指针(多级间接寻址) #include <iostream>using namespace std;int main () {int var;int *ptr;int * ...

  4. step7db块寻址_step7中的难点:间接寻址示例,中文详细注释。

    step7中的难点:间接寻址示例,中文详细注释. 推荐欢迎纠错,防止误导. FUNCTION "DBtoDB" : VOID //该功能块的作用是把一个数据块中的指定的一批数据,复 ...

  5. 汇编语言-004(LABEL 、间接寻址、变址操作数、指针使用、TypeDef、LOOP、DWORD变量交换高位低位字)

    1: LABEL : 为一个标号定义大小属性,但不分配内存与下一个变量共用内存,与C中UNION类似 .386 .model flat,stdcall.stack 4096 ExitProcess P ...

  6. 间接寻址级别不同_单片机指令系统与寻址方式

    单片机要正常运作,事先需编制程序,再把程序放入存贮器中,然后由CPU执行该程序.程序是由指令组成的,指令的基本组成是操作码和操作数.单片机的品种很多,设计时怎样表示操作码和操作数,都有各自的规定,再有 ...

  7. 一个具有20位地址和32位字长的存储器_详解西门子间接寻址之存储器间接寻址...

    [地址的概念] 完整的一条指令,应该包含指令符+操作数(当然不包括那些单指令,比如 NOT 等).其中的操作数是指令要执行的目标,也就是指令要进行操作的地址. 我们知道,在 PLC 中划有各种用途的存 ...

  8. 寄存器间接寻址缺点_详解西门子间接寻址之地址寄存器间接寻址

    关于间接寻址分为存储器间接寻址和地址寄存器间接寻址,本文主要针对地址寄存器间接寻址进行详细讲解,关于存储器间接寻址可参见前面文章,链接如下: #详解西门子间接寻址之存储器间接寻址 [地址寄存器间接寻址 ...

  9. 80X86CPU独立编址方式的两种寻址方式——直接寻址直接写和间接寻址DX

    直接寻址 :可寻址256个端口,编为00H–0FFH OUT 80H,AL IN AL,0FFH • 间接寻址: 使用16位地址码,从0000H- 0FFFFH,I/O端口地址用间接方式给出. MOV ...

最新文章

  1. Codeforces40E[Number Table]
  2. 白话Elasticsearch56-数据建模之 Path Hierarchy Tokenizer 对文件系统进行数据建模以及文件搜索
  3. 上接游戏人生Silverlight(2) - 趣味钢琴[Silverlight 2.0(c#)]
  4. SAP Spartacus angular.json 中定义的 serve-ssr
  5. Airflow 中文文档:数据分析
  6. python自动化办公教程百度云-693629 用Python自动办公,做职场高手(完结)
  7. C# 使用 Windows 消息队列机制
  8. 服务器各项指标的图形化显示
  9. 将Excel数据批量生成条形码
  10. 知网研学+OneDrive实现多电脑文献同步
  11. 数据库在开发中的作用
  12. COOC6.2增加同义词合并无意义词删除等功能
  13. USB通信协议与供电协议全解
  14. VisualStudio/VS在一个项目中添加多个c++文件
  15. 验证码、通知短信API常见使用问题
  16. 学校初一模拟赛(2019.4.7)
  17. 面试官:说说MySQL中IN和OR的查询效率和区别
  18. ElementUI 色彩Color
  19. JSP学习(1)—— 基本语法
  20. 京东杨业飞:京东云原生大规模实践之路

热门文章

  1. db2 查看表结构_数据库结构文档的生成利器
  2. sendgrid java_java – SendGrid电子邮件API,发送电子邮件附件
  3. 深入理解Date对象
  4. canvas填充和描边介绍
  5. 1345.跳跃游戏IV-LeetCode
  6. php 变量类型 typeof,typeof和instanceof的区别是什么
  7. linux根目录数量限制,windows,linux文件夹下文件上限最大个数
  8. python字典类型可迭代_核心数据类型--字典
  9. android手机用户收入,苹果与安卓用户特征对比 iPhone用户高收入占多
  10. oracle客户端更改字符集,oracle 服务器跟客户端字符集的查看和修改