首页 > 其他分享 >5.25

5.25

时间:2023-05-25 20:57:43浏览次数:53  
标签:Node 结点 cout currNode headNode LinkList 5.25

一 题目以及要求

请使用模板参数设计实现单向链表模板类LinkList,应能根据需求构建相应类型数据结点的单向链表结构,main(void)完成对其的测试

(1)设计实现结点模板类Node,结点的数据域应能各种类型数据;其中成员函数getData(void)的作用是获取结点的数据域。构造函数输出信息“Node Constructor run”,拷贝构造函数输出信息“Node CopyConstructor run”,析构函数输出信息“Node Destructor run”
(2)在结点模板类Node的支持下设计实现结点单向链表模板类LinkList,其中:
①LinkList类的数据包括结点链表的头结点headNode和游标position(游标用于表示当前操作位置)
②有参构造函数实现由数组构建链表的功能,构造函数输出信息“LinkList Constructor run”;拷贝构造函数输出信息“LinkList CopyConstructor run”,析构函数输出信息“LinkList Destructor run”
③设计实现成员函数insertNode(n),其功能为在游标位置后插入一个同类型结点n。
④设计实现成员函数searchNode(value),其功能为在链表中查找数据域等于value的结点,若查找成功的同时修改游标位置。
⑤设计实现成员函数getSize(),其功能为返回链表中的元素个数。
⑥设计实现成员函数next(),其功能为使游标移动到下一个结点。
⑦设计实现成员函数currNode()const,其功能为返回当前结点。
⑧设计实现成员函数delNode(),其功能为移除当前结点。
⑨设计实现成员函数show(),其功能为输出链表。

二 代码

#include <iostream>
using namespace std;

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;
};

int main()
{
int i,a[5]= {0,1,2,3,4};
for(i=0;i<5;i++)
scanf("%d",&a[i]);
LinkList<int> l1(a,5),l2(l1);
cout<<l2.getSize()<<endl;
l1.show();
if (l2.searchNode(2))
cout<<"Found:"<<l2.currNode().getData()<<endl;
else
cout<<"Not Found"<<endl;
l2.delNode();
Node <int> *p1=new Node<int>(11);
l2.insertNode(*p1);
l2.show();
return 0;
}

标签:Node,结点,cout,currNode,headNode,LinkList,5.25
From: https://www.cnblogs.com/galileo9527/p/17432893.html

相关文章

  • 5.25
    #include<stdio.h>voidmain(){inti,num1,num2,j,n=0;printf("Thefractionserialswithdemominator40is:\n");for(i=1;i<40;i++){num1=40;num2=i;for(j=2;j<=num2;j++)if(num1%j==0&&num2%j==0)break;if(j>num2){printf("%2d/40......
  • 5.25打卡
    一、问题描述:在屏幕上用“*”显示0~360度的余弦函数cos(x)曲线二、设计思路:此问题关键在于余弦曲线在0~360度的范围内,一行要显示两个点。考虑到cos(x)的对称性,将屏幕的行方向定义为x,列方向定义为y,则0~180度的图形是左右对称的。若将图形的总宽度定义为62列,计算出x行0~180度时y点的......
  • 5.25打卡
     2.思路设计 3.程序流程图 4.代码实现#include<bits/stdc++.h>usingnamespacestd;main(){intx,y,z,count=1;printf("可能的兑换方法如下:\n");for(x=0;x<=50;x+=10)for(y=0;y<=50-x;y+=5)for(z=0;z<=50-x-y;z++)......
  • 最完美WIN10_Pro_22H2.19045.2546软件选装纯净版VIP39.0
    【系统简介】=============================================================1.本次更新母盘来WIN10_Pro_22H2.19045.2546。进一步优化调整。2.此版本精简量不大,满足各大平......
  • 最完美WIN10_Pro_22H2.19045.2545软件选装纯净版VIP38.7
    【系统简介】=============================================================1.本次更新母盘来WIN10_Pro_22H2.19045.2545。进一步优化调整。2.不支持更新,更新后精简版更新......