我需要为双链接跳过列表类使用新功能重载ostream操作符
当我找到我的类的实例时,我希望它在我的跳过列表的各个级别上迭代,并且无论head指针指向nullptr哪里,我都希望它打印级别名称和空状态
看起来像:
添加7后的
级别:4—空
级别:3—空
级别:2—空
级别:1—空
级别:0-7
我需要动态输入级别数。我尝试分配int-level=SkipList::maxLevels\ux但我得到错误非静态数据成员的无效使用
我把ostream变成了朋友。我如何指示它访问maxLevels\uu数据成员
SkipList.h
#包括<;标准h>;
#包括<;iostream>;
#ifndef跳过列表_
#定义跳过列表_
使用名称空间std;
职业技工
{
私人:
结构SkipListNode{
//方便构造函数创建节点,设置其数据,并将所有指针设置为nullptr
显式SkipListNode(int数据){
数据=数据;
下一步=空;
prev_uuz=NULL;
upLevel_uuz=NULL;
下层=空;
}
//用于SNode的数据
int数据;
//链接到同一级别的下一个
SkipListNode*下一步;
//链接到同一级别的上一个
SkipListNode*上一个;
//衔接一级
SkipListNode*upLevel_u3;;
//向下链接一级
SkipListNode*下一级;
};
//SkipList的最大级别为0到maxLevels-1
int-maxLevels;
//maxLevels_uuSkipListNode指针数组作为头指针。例如,
//如果maxLevels=2,我们将有头[0]和头[1]。动态分配
//由构造函数生成。
SkipListNode**头;
//maxLevels_uuSkipListNode指针数组作为尾部指针。
SkipListNode**tails;
//给定一个指向SkipListNode的指针,将其放在给定的nextNode之前
void addBefore(SkipListNode*newNode,SkipListNode*nextNode,int-level);
//在50%的时间内返回true,
//每个节点都有50%的几率处于更高级别
布尔·阿尔索希赫()常数;
公众:
//建造师
SkipList(){maxLevels_u=1;}
SkipList(int-maxLevels);
//析构函数
//虚拟~SkipList();
//如果成功添加,则返回true,没有重复项
布尔插入(整数项);
//项目删除;如果成功删除,则返回true
布尔擦除(int项);
//如果在SkipList中找到,则返回true
布尔包含(整数项)常量;
friend ostream&;operator<;;(ostream&;os,const SkipList&;list){
int-level=SkipList::maxLevels;
而(级别>;=0){
SkipListNode*temp=列表头[level];
if(temp==nullptr){
操作系统“级别:”级别-“空”;;
}
否则{
while(临时){
操作系统“温度-数据”;;
温度=温度->;下一步;
}
}
os<;<;endl;
级别--;
}
}
};
#恩迪夫
SkipList::maxLevels指的是SkipList类的静态maxLevels成员。
因此,如果需要将maxLevels\uu作为SkipList的所有实例的最大级别,则必须将其声明为static。
否则,在重载的friend函数中,您必须使用列表实例的私有成员
friend ostream&;操作员<&书信电报;(ostream&;os、const SkipList&;list){
int-level=list.maxLevels;
...