C++实现的间接寻址
之前学过,数据描述方法中有公式化描述,链表描述,间接寻址和模拟指针,在之前已经将公式化描述和链表描述通过代码的形式展现出来了,现在贴出简介寻址的代码。其中简介寻址是融合了公式化描述和链表描述的有点,使用一个指针表来记录数据的位置,指针表相当于一个数组,这样在插入,删除的时候,其中的数据的位置并没有发生变化,而仅仅就是指针表的指向发生了变化,同时很多操作又能像公式化一样通过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++实现的间接寻址相关推荐
- 与数据相关的运算符和伪指令 offset align ptr type lengthof sizeof label 间接寻址 间接操作数 数组 变址操作数 指针 jmp, loop
与数据相关的运算符和伪指令 offset 数据标号的偏移量,按字节计算,表示数据标号到数据段开始的距离 .data bVal byte ? wVal word ? dVal dword ? dVal2 ...
- 间接寻址级别不同_详解西门子间接寻址之地址寄存器间接寻址
关于间接寻址分为存储器间接寻址和地址寄存器间接寻址,本文主要针对地址寄存器间接寻址进行详细讲解,关于存储器间接寻址可参见前面文章,链接如下: #详解西门子间接寻址之存储器间接寻址 [地址寄存器间接寻址 ...
- C++ 指向指针的指针(多级间接寻址)
C++ 指向指针的指针(多级间接寻址) #include <iostream>using namespace std;int main () {int var;int *ptr;int * ...
- step7db块寻址_step7中的难点:间接寻址示例,中文详细注释。
step7中的难点:间接寻址示例,中文详细注释. 推荐欢迎纠错,防止误导. FUNCTION "DBtoDB" : VOID //该功能块的作用是把一个数据块中的指定的一批数据,复 ...
- 汇编语言-004(LABEL 、间接寻址、变址操作数、指针使用、TypeDef、LOOP、DWORD变量交换高位低位字)
1: LABEL : 为一个标号定义大小属性,但不分配内存与下一个变量共用内存,与C中UNION类似 .386 .model flat,stdcall.stack 4096 ExitProcess P ...
- 间接寻址级别不同_单片机指令系统与寻址方式
单片机要正常运作,事先需编制程序,再把程序放入存贮器中,然后由CPU执行该程序.程序是由指令组成的,指令的基本组成是操作码和操作数.单片机的品种很多,设计时怎样表示操作码和操作数,都有各自的规定,再有 ...
- 一个具有20位地址和32位字长的存储器_详解西门子间接寻址之存储器间接寻址...
[地址的概念] 完整的一条指令,应该包含指令符+操作数(当然不包括那些单指令,比如 NOT 等).其中的操作数是指令要执行的目标,也就是指令要进行操作的地址. 我们知道,在 PLC 中划有各种用途的存 ...
- 寄存器间接寻址缺点_详解西门子间接寻址之地址寄存器间接寻址
关于间接寻址分为存储器间接寻址和地址寄存器间接寻址,本文主要针对地址寄存器间接寻址进行详细讲解,关于存储器间接寻址可参见前面文章,链接如下: #详解西门子间接寻址之存储器间接寻址 [地址寄存器间接寻址 ...
- 80X86CPU独立编址方式的两种寻址方式——直接寻址直接写和间接寻址DX
直接寻址 :可寻址256个端口,编为00H–0FFH OUT 80H,AL IN AL,0FFH • 间接寻址: 使用16位地址码,从0000H- 0FFFFH,I/O端口地址用间接方式给出. MOV ...
最新文章
- Codeforces40E[Number Table]
- 白话Elasticsearch56-数据建模之 Path Hierarchy Tokenizer 对文件系统进行数据建模以及文件搜索
- 上接游戏人生Silverlight(2) - 趣味钢琴[Silverlight 2.0(c#)]
- SAP Spartacus angular.json 中定义的 serve-ssr
- Airflow 中文文档:数据分析
- python自动化办公教程百度云-693629 用Python自动办公,做职场高手(完结)
- C# 使用 Windows 消息队列机制
- 服务器各项指标的图形化显示
- 将Excel数据批量生成条形码
- 知网研学+OneDrive实现多电脑文献同步
- 数据库在开发中的作用
- COOC6.2增加同义词合并无意义词删除等功能
- USB通信协议与供电协议全解
- VisualStudio/VS在一个项目中添加多个c++文件
- 验证码、通知短信API常见使用问题
- 学校初一模拟赛(2019.4.7)
- 面试官:说说MySQL中IN和OR的查询效率和区别
- ElementUI 色彩Color
- JSP学习(1)—— 基本语法
- 京东杨业飞:京东云原生大规模实践之路
热门文章
- db2 查看表结构_数据库结构文档的生成利器
- sendgrid java_java – SendGrid电子邮件API,发送电子邮件附件
- 深入理解Date对象
- canvas填充和描边介绍
- 1345.跳跃游戏IV-LeetCode
- php 变量类型 typeof,typeof和instanceof的区别是什么
- linux根目录数量限制,windows,linux文件夹下文件上限最大个数
- python字典类型可迭代_核心数据类型--字典
- android手机用户收入,苹果与安卓用户特征对比 iPhone用户高收入占多
- oracle客户端更改字符集,oracle 服务器跟客户端字符集的查看和修改