用C++实现单向循环链表的解决方法
2023-06-13 09:15:00 时间
用C++实现一个单向循环链表,从控制台输入整型数字,存储在单项循环链表中,实现了求链表大小。
不足之处,还望指正!
复制代码代码如下:
不足之处,还望指正!
//TestSound.cpp:定义控制台应用程序的入口点。
//实现单向循环链表
#include"stdafx.h"
#include<iostream>
#include<string>
usingnamespacestd;
//定义链表一个节点的结构体
template<classT>
structNODE
{
Tdata;//节点的数据域
NODE*next;//节点的指针域
};
//自定义链表容器(含有的方法与C++不尽相同)
template<classT>
classMyList
{
public:
//构造函数,初始化一个头结点,data为空,next指向第一个节点
MyList()
{
phead=newNODE<T>;
phead->data=NULL;
phead->next=phead;
}
//析构函数,将整个链表删除,这里采用的是正序撤销
~MyList()
{
NODE<T>*p=phead->next;
while(p!=phead)
{
NODE<T>*q=p;
p=p->next;
deleteq;
}
deletephead;
}
//复制构造函数
MyList(MyList&mylist)
{
NODE<T>*q=mylist.phead->next;
NODE<T>*pb=newNODE<T>;
this->phead=pb;
while(q!=mylist.phead)
{
NODE<T>*p=newNODE<T>;
p->data=q->data;
p->next=phead;
pb->next=p;
pb=p;
q=q->next;
}
}
//返回list表的大小
intget_size();
//将用户输入的integer数据,插入list表中
voidpush_back();
//将list表中的元素输出
voidget_elements();
private:
NODE<T>*phead;
};
//返回list表的大小
template<classT>
intMyList<T>::get_size()
{
intcount(0);
NODE<T>*p=phead->next;
while(p!=phead)
{
count++;
p=p->next;
}
returncount;
}
//将用户输入的integer数据,插入list表中
template<classT>
voidMyList<T>::push_back()
{
inti;
cout<<"Enterseveralintegernumber,enterctrl+zfortheend:"<<endl;
NODE<T>*p=phead;
while(cin>>i)
{
NODE<T>*q=newNODE<T>;
p->next=q;
q->data=i;
q->next=phead;
p=q;
}
}
//将list表中的元素输出
template<classT>
voidMyList<T>::get_elements()
{
NODE<T>*q=phead->next;
while(q!=phead)
{
cout<<q->data<<"";
q=q->next;
}
cout<<endl;
}
int_tmain(intargc,_TCHAR*argv[])
{
MyList<int>mylist;
mylist.push_back();
MyList<int>mylist2(mylist);
mylist.get_elements();
mylist2.get_elements();
cout<<endl<<mylist.get_size()<<endl;
return0;
}