对象的多数组表示(不一样的链表-多数组表示链表)

对象的多数组表示

(不一样的链表-多数组表示链表)

//
// Created by 许加权 on 2021/7/12.
//#ifndef C11LEARN_MOSTGROUPSREPRESENTOBJECTS_H
#define C11LEARN_MOSTGROUPSREPRESENTOBJECTS_H
template<typename T>
class MostGroupsRepresentObjects
{
private:int capacity;int *next;int *prev;T* array;int head;int tail;int size;
private:void clear();void copy(const MostGroupsRepresentObjects<T> & l);
public:MostGroupsRepresentObjects(int capacity = 50);const MostGroupsRepresentObjects & operator=(const MostGroupsRepresentObjects<T> & l);MostGroupsRepresentObjects(const MostGroupsRepresentObjects<T> & l);void add(const T key);bool remove(const T key);int search(const T key);virtual ~MostGroupsRepresentObjects();int length() const;bool full();bool empty();T & operator[](int index);T operator[](int index) const;
};
template<typename T>
MostGroupsRepresentObjects<T>::MostGroupsRepresentObjects(int capacity):capacity(capacity){if(this->capacity<50)this->capacity = 50;array = new T[capacity];next = new int[capacity];prev = new int[capacity];head = -1;tail = -1;size = 0;
}
template<typename T>
const MostGroupsRepresentObjects<T> &MostGroupsRepresentObjects<T>::operator=(const MostGroupsRepresentObjects<T> & l){if(this == &l)return *this;clear();copy(l);return *this;
}
template<typename T>
MostGroupsRepresentObjects<T>::MostGroupsRepresentObjects(const MostGroupsRepresentObjects<T> & l){copy(l);
}
template<typename T>
void MostGroupsRepresentObjects<T>::clear(){delete [] array;delete [] next;delete[] prev;array = next = prev = nullptr;head = -1;tail = -1;size = 0;
}
template<typename T>
void MostGroupsRepresentObjects<T>::copy(const MostGroupsRepresentObjects<T> & l){capacity = l.capacity;array = new T[capacity];next = new int[capacity];prev = new int[capacity];head = l.head;tail = l.tail;size = l.size;for (int i = 0; i < capacity; ++i) {array[i] = l.array[i];next[i] = l.next[i];prev[i] = l.prev[i];}
}
template<typename T>
void MostGroupsRepresentObjects<T>::add(const T key){if(full()) return;if(head == - 1){head = tail = 0;array[0] = key;next[0] = -1;prev[0] = -1;size = 1;}else{int index = -1;while (++index<capacity){if(next[index] == 0 && prev[index] == 0){break;}}next[tail] = index;prev[index] = tail;array[index] = key;tail = index;next[index] = -1;size++;}
}
template<typename T>
bool MostGroupsRepresentObjects<T>::remove(const T key){if(empty()) return false;int result = search(key);if(result == -1){return false;}else{int temp_prev = prev[result];int temp_next = next[result];if(temp_prev == -1){head = temp_next;}else{next[prev[result]] = temp_next;}if(temp_next == -1){tail = temp_prev;}else{prev[next[result]] = prev[result];}prev[result] = next[result] = 0;size--;return true;}
}
template<typename T>
int MostGroupsRepresentObjects<T>::search(const T key){int current = head;while (current!=-1 && array[current]!=key){current = next[current];}return current;
}
template<typename T>
MostGroupsRepresentObjects<T>::~MostGroupsRepresentObjects(){clear();
}
template<typename T>
int MostGroupsRepresentObjects<T>::length() const{return size;
}
template<typename T>
bool MostGroupsRepresentObjects<T>::full(){return  size == capacity;
}
template<typename T>
bool MostGroupsRepresentObjects<T>::empty(){return size == 0;
}
template<typename T>
T & MostGroupsRepresentObjects<T>::operator[](int index){if(index<0 && index>=size)throw "index out of bound";int current = head;while (--index>=0){current = next[current];}return array[current];
}
template<typename T>
T MostGroupsRepresentObjects<T>::operator[](int index) const{if(index<0 && index>=size)throw "index out of bound";int current = head;while (--index>=0){current = next[current];}return array[current];
}#endif //C11LEARN_MOSTGROUPSREPRESENTOBJECTS_H

测试代码

    int arr[] = {1, 4, 6, -9, 2, -5, 10, -3, -7,12};int length = sizeof(arr)/sizeof (int);MostGroupsRepresentObjects<int> mostGroupsRepresentObjects(50);for (int i = 0; i < length; ++i) {mostGroupsRepresentObjects.add(arr[i]);}for (int i = 0; i < length; ++i) {cout<<mostGroupsRepresentObjects.search(arr[i])<<" ";}cout<<endl;for (int i = 0; i < mostGroupsRepresentObjects.length(); ++i) {cout<<mostGroupsRepresentObjects[i]<<" ";}cout<<endl;mostGroupsRepresentObjects.remove(-3);mostGroupsRepresentObjects.remove(-5);for (int i = 0; i < length/2; ++i) {cout<<mostGroupsRepresentObjects.remove(arr[i])<<" ";}cout<<endl;MostGroupsRepresentObjects<int> mostGroupsRepresentObjects_b(mostGroupsRepresentObjects);for (int i = 0; i < mostGroupsRepresentObjects_b.length(); ++i) {cout<<mostGroupsRepresentObjects_b[i]<<" ";}cout<<endl;MostGroupsRepresentObjects<int> mostGroupsRepresentObjects_c;mostGroupsRepresentObjects_c = mostGroupsRepresentObjects_b;mostGroupsRepresentObjects_c[9]=220;for (int i = 0; i < mostGroupsRepresentObjects_c.length(); ++i) {cout<<mostGroupsRepresentObjects_c[i]<<" ";}

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

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

相关文章

[开源] .Net 使用 ORM 访问 神舟通用数据库(神通)

前言天津神舟通用数据技术有限公司&#xff08;简称“神舟通用公司”&#xff09;&#xff0c;隶属于中国航天科技集团&#xff08;CASC&#xff09;。是国内从事数据库、大数据解决方案和数据挖掘分析产品研发的专业公司。公司获得了国家核高基科技重大专项重点支持&#xff0…

对象的单数组表示(用单数组实现链表-不一样的链表实现)

对象的单数组表示 &#xff08;用单数组实现链表-不一样的链表实现&#xff09; #ifndef C11LEARN_SINGULARGROUPSREPRESENTOBJECTS_H #define C11LEARN_SINGULARGROUPSREPRESENTOBJECTS_H #include "cmath" #include "../tools/tool.h" template<typ…

图的建立-邻接矩阵表示(C语言)

代码如下: /* 图的邻接矩阵表示法 */#define MaxVertexNum 100 /* 最大顶点数设为100 */ #define INFINITY 65535 /* ∞设为双字节无符号整数的最大值65535*/ typedef int Vertex; /* 用顶点下标表示顶点,为整型 */ typedef int WeightType; /* 边的…

在 Xunit 中使用依赖注入

在 Xunit 中使用依赖注入Intro之前写过一篇 xunit 的依赖注入相关的文章&#xff0c;但是实际使用起来不是那么方便今天介绍一个基于xunit和微软依赖注入框架的“真正”的依赖注入使用方式 ——— Xunit.DependencyInjection, 来自大师的作品&#xff0c;让你在测试代码里使用依…

图的建立-邻接表表示(C语言)

代码如下: /* 图的邻接表表示法 */#define MaxVertexNum 100 /* 最大顶点数设为100 */ typedef int Vertex; /* 用顶点下标表示顶点,为整型 */ typedef int WeightType; /* 边的权值设为整型 */ typedef char DataType; /* 顶点存储的数据类型设为字…

对一组同构对象用单数组表示法实现(算法导论第十章10.3-2)

对一组同构对象用单数组表示法实现 &#xff08;算法导论第十章10.3-2&#xff09; 考虑到数据安全问题&#xff0c;多用了一个数组来处理安全问题。 #ifndef C11LEARN_SINGULARGROUPSREPRESENTISOMORPHICOBJECTS_H #define C11LEARN_SINGULARGROUPSREPRESENTISOMORPHICOBJEC…

Java实现BST搜索树

代码如下: package BSTree;import java.util.ArrayList; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner;public class BSTree {private class TreeNode{int data;TreeNode left;TreeNode right;public TreeNode(int e){data e;left null;…

给定一个n节点的二叉树,写出一个O(n)时间递归过程,将该树每个节点关键字输出(算法导论第十章10.4-2)

给定一个n节点的二叉树&#xff0c;写出一个O(n)时间递归过程&#xff0c;将该树每个节点关键字输出 &#xff08;算法导论第十章10.4-2&#xff09; #include <iostream> template<typename T> void TraverseBinaryTreeIndex(const BinaryTreeNodeIndex<T>…

C#由转换二进制所引起的思考,了解下?

【导读】最近遇到很有意思转换二进制的问题&#xff0c;有部分童鞋俨然已了解&#xff0c;可能也有一部分童鞋没碰到过也就不知情&#xff0c;这里我们来深入学习下转换二进制所带来的问题。在写此篇文章时&#xff0c;非常开心&#xff0c;收到再一次连任MVP的邮件&#xff0c…

给定一个n节点的二叉树,写出一个O(n)时间非递归过程,将该树每个节点关键字输出,可以使用一个栈作为辅助数据结构(算法导论第十章10.4-3)

给定一个n节点的二叉树&#xff0c;写出一个O(n)时间非递归过程&#xff0c;将该树每个节点关键字输出&#xff0c;可以使用一个栈作为辅助数据结构 &#xff08;算法导论第十章10.4-3&#xff09; template<typename T> void TraverseBinaryTreeIndexByStack(const Bi…

Java实现堆(最大堆,最小堆)

最大堆代码如下: package MaxHeap;import java.util.Scanner;public class Heap {private int data[];private int size;private int capacity;private final int maxNum 999999999;public Heap(){data new int[101];size 0;capacity 10;data[0] maxNum;}public Heap(int …

.Net Core In Docker 在容器内编译并发布

Docker可以说是现在微服务&#xff0c;DevOps的基础&#xff0c;咱们.Net Core自然也得上Docker。.Net Core发布到Docker容器的教程网上也有不少&#xff0c;但是今天还是想来写一写。你搜.Net core程序发布到Docker网上一般常见的有两种方案&#xff1a;1、在本地编译成Dll文件…

带你深入探究云原生时代的分布式操作系统 Kubernetes

过去几年&#xff0c;以 docker、kubernetes 为代表的容器技术已发展为一项通用技术&#xff0c;BAT、滴滴、京东、头条等大厂&#xff0c;都争相把容器和 k8s 项目作为技术重心&#xff0c;试图“放长线钓大鱼”。就说腾讯吧&#xff0c;目前基本所有业务都跑在云上&#xff0…

Java实现AVL平衡树

代码如下: package AVLTree;import java.util.ArrayList; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner;public class AVLTree {private class TreeNode{private int data;TreeNode left;TreeNode right;private int height;public TreeNo…

辅助类BinaryTreeNodeIndex(用index索引代替指针)

辅助类BinaryTreeNodeIndex (用index索引代替指针&#xff09; template<typename T> class BinaryTreeNodeIndex { public:T key;int left;int right;int parent; public:BinaryTreeNodeIndex(){}BinaryTreeNodeIndex(const T key,int parent -1,int left -1,int ri…

C# 9.0 新特性之 Lambda 弃元参数

阅读本文大概需要不到 1 分钟。弃元&#xff08;Discards&#xff09; 是在 C# 7.0 的时候开始支持的&#xff0c;它是一种人为丢弃不使用的临时虚拟变量。语法上它是用来赋值的&#xff0c;但它却不被分配存储空间&#xff0c;即没有值&#xff0c;所以不能从中读取值。弃元用…

辅助类BinaryTreeNode(二叉树节点)

辅助类BinaryTreeNode (二叉树节点) template<typename T> class BinaryTreeNode { public:T key;BinaryTreeNode<T>* parent;BinaryTreeNode<T>* left;BinaryTreeNode<T>* right; public:BinaryTreeNode(){}BinaryTreeNode(T key,BinaryTreeNode<…

Java实现Huffman哈夫曼树

代码如下: package HuffmanTree;import java.util.ArrayList; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner;public class HuffmanTree {private class TreeNode{private int val;private TreeNode left;private TreeNode right;public Tr…

应用交付老兵眼中的Envoy, 云原生时代下的思考

Envoy 是云原生时代的明星&#xff0c;其本质是反向代理负载均衡类软件&#xff0c;领域上归于应用交付&#xff0c;那么作为应用交付领域的老兵如何看待 Envoy&#xff0c;Envoy 又引发了哪些关于传统应用交付领域的思考&#xff1f;关于作者林静&#xff0c;F5 软件方向解决方…

给定一个n节点二叉树,写出一个O(n)时间的非递归的过程,将该树每个结点的关键字输出(算法导论第三版第十章10.4-5)

给定一个n节点二叉树&#xff0c;写出一个O(n)时间的非递归的过程&#xff0c;将该树每个结点的关键字输出。要求除该树本树的存储空间外只能使用固定量的额外存储空间&#xff0c;且过程中不得修改该树&#xff0c;即使是暂时的修改也不允许。 &#xff08;算法导论第三版第十…