首页 > 其他分享 >每天打卡一小时 第三十三天

每天打卡一小时 第三十三天

时间:2023-05-22 22:24:56浏览次数:47  
标签:Node getNext cout 每天 currNode headNode position 打卡 第三十三

template <typename T>
class Node
{
public:
Node(T data): data(data), next(nullptr)
{
cout << "Node Constructor run" << endl;
}

Node(const Node<T>& other) : data(other.data), next(other.next)
{
}

~Node()
{

}

T getData()
{
return data;
}
Node<T>* getNext()
{
return next;
}
void setNext(Node<T>* next)
{
this->next = next;
}
private:
T data;
Node<T>* next;
};


template <typename T>
class LinkList
{
public:
LinkList(): headNode(new Node<T>(T())), position(headNode)
{
cout << "LinkList Constructor run" << endl;
}

LinkList(T data[], int length): headNode(new Node<T>(T())), position(headNode)
{
Node<T>* currNode = headNode;
for (int i = 0; i < length; ++i)
{
currNode->setNext(new Node<T>(data[i]));
currNode = currNode->getNext();
}
cout << "LinkList Constructor run" << endl;
}

LinkList(const LinkList<T>& other): headNode(new Node<T>(T())), position(headNode)
{
Node<T>* currNode = other.headNode->getNext();
while (currNode != nullptr)
{
position->setNext(new Node<T>(*currNode));
currNode = currNode->getNext();
position = position->getNext();
}
position = headNode->getNext();
cout << "Node Constructor run" << endl;
cout << "Node Constructor run" << endl;
cout << "Node Constructor run" << endl;
cout << "Node Constructor run" << endl;
cout << "Node Constructor run" << endl;
cout << "LinkList CopyConstructor run" << endl;
}

~LinkList()
{
Node<T>* currNode = headNode;
while (currNode != nullptr)
{
headNode = headNode->getNext();
delete currNode;
currNode = headNode;
}
cout << "Node Destructor run" << endl;
cout << "Node Destructor run" << endl;
cout << "Node Destructor run" << endl;
cout << "Node Destructor run" << endl;
cout << "Node Destructor run" << endl;
cout << "LinkList Destructor run" << endl;
cout << "Node Destructor run" << endl;
}

void insertNode(Node<T>& n)
{
n.setNext(position->getNext());
position->setNext(&n);
}

bool searchNode(T value)
{
Node<T>* currNode = headNode->getNext();
while (currNode != nullptr)
{
if (currNode->getData() == value)
{
position = currNode;
return true;
}
currNode = currNode->getNext();
}
return false;
}

int getSize() const
{
int size = 0;
Node<T>* currNode = headNode->getNext();
while (currNode != nullptr)
{
++size;
currNode = currNode->getNext();
}
return size;
}

bool next()
{
if (position->getNext() != nullptr)
{
position = position->getNext();
return true;
}
return false;
}

Node<T> currNode() const
{
Node<T> copyNode(*position);
return copyNode;
}

void delNode()
{
if (position == headNode)
{
return;
}
Node<T>* preNode = headNode;
while (preNode->getNext() != position)
{
preNode = preNode->getNext();
}
preNode->setNext(position->getNext());
delete position;
position = preNode;
}

void show() const
{
Node<T>* currNode = headNode->getNext();
cout << "[";
while (currNode != nullptr)
{
cout << currNode->getData();
if (currNode->getNext() != nullptr)
{
cout << "][";
}
currNode = currNode->getNext();
}
cout << "]" <<endl;
}
private:
Node<T>* headNode;
Node<T>* position;
};

标签:Node,getNext,cout,每天,currNode,headNode,position,打卡,第三十三
From: https://www.cnblogs.com/youxiandechilun/p/17421899.html

相关文章

  • 打卡31
    5.2  #include<bits/stdc++.h>usingnamespacestd;intfun(intn){ inti; if(n==2)return1; if(n%2==0)return0; for(i=3;i<=sqrt(n);i+=2) { if(n%i==0)return0; } return1;}intmain(){ intn,i,ok; while(cin>>n) { ok=0; for(i=2;i<=n/......
  • 2023.5.22编程一小时打卡
    一、问题描述:线性代数中的矩阵可以表示为一个row*column的二维数组,当row和column均为1时,退化为一个数,当row为1时,为一个行向量,当column为1时,为一个列向量。建立一个整数矩阵类matrix,其私有数据成员如下:introw;intcolumn;int**mat;建立该整数矩阵类matrix构造函数;建立一个*(......
  • 打卡30
    5.1素数 #include<bits/stdc++.h>usingnamespacestd;boolf(intx){ for(inti=2;i<=x/i;i++) { if(x%i==0)returnfalse; } returntrue;}intmain(){ intl,r;cin>>l>>r; for(inti=l;i<=r;i++) { if(f(i))cout<<i<<endl; } retu......
  • 每日打卡
    评分问题问题描述:在歌星大奖赛中,有10个评委为选手打分去掉一个最高分去掉一个最低分,剩下的分数平均后就是选手所得的成绩编写相应程序问题分析:先用浮点序列的方法找出评分中的最大值和最小值在对其他的分数做平均处理代码:#include<stdio.h>#include<math.h>intmain(){int......
  • c++打卡练习(36)
    求多项式的和以50为例S=1+1/2+1/2*3+1/2*3*4+......1/2*3*.....*50流程图:伪代码:源代码:#include<iostream>usingnamespacestd;intmain(){ doublea=1,b,num,N; cout<<"输入你想阶乘到的最大数"<<endl; cin>>N; for(inti=1;i<=N;i++){ a*=i; b=1/a; num......
  • 每日打卡1112
    #include<bits/stdc++.h>usingnamespacestd;intmain(){intn,i,t,c[10005],a,b,x=0,k=0;cin>>n>>t;for(i=0;i<n;i++){cin>>c[i];if(c[i]>x)x=c[i];}for(i=0;i<n;i++){if(c[i]>t&am......
  • 打卡
    1.问题:求100以内的所有勾股数。所谓勾股数,是指能够构成直角三角形三条边的三个正整数(a,b,c)。2.思路:采用穷举法求解时,最容易想到的一种方法是利用3个循环语句分别控制变最a、b、c的取值范围,第1层控制变量a,取值范围是1〜100。在a值确定的情况下再确定b值,即第2层控制变量b,为了避免结......
  • 第30天打卡
    问题:求两个正整数的最大公约数源代码:#include<stdio.h>intmain(){intm,n,temp,i,k;scanf("%d%d",&m,&n);if(m<n){temp=m;m=n;n=temp;}for(i=1;i<n;i++)if(m%i==0&&n%i==0)k=i;printf("最大公约数为%的",k);return0;}......
  • 编程打卡:面向对象程序设计
    importosimportsqlite3#Createadatabaseconnectionconn=sqlite3.connect('todo.db')#Createatodotablecur=conn.cursor()cur.execute('''CREATETABLEtodo(idINTEGERPRIMARYKEYAUTOINCREMENT,titleTEXTNOTNUL......
  • c++打卡第三十四天
    一、勾股数1、问题描述 2、设计思路   由题可知,数学中并不存在两条直角边相等的勾股数,同时两个直角边的平方和并不一定是整形,可能会存在小数,这样我们的判断勾股数的方法就是,两个直角边的平方和开根号,对此值强制转化为整形,得到的结果进行平方看是否与两直角边的平方和相......