C++中怎么实现一个单向链表,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
C++单向链表实现代码:
#include < iostream>
using namespace std;
template < class T>
struct node
{
//public:
// 结构体成员默认就是public的
T data;
node< T> *next;
};
//typedef struct node NODE;
//typedef NODE *NODEPTR;
//typedef后面要跟具体的类类型,而不是一个类模版。eg: typedef node< T>
NODE (C++中,实例化结构体时struct可省略)template < class T>
class list
{
public:
//以下三个函数要供外部调用,所以要声明为public,class默认为private。
/*
void creat(T &p);
void print(T p);
void destroy(T &p);
*/
//这三个函数的参数有问题,按照下文的实现,我认为应改为如下:
void creat(T *p);
void print(T *p);
void destroy(T *p);
};
template< class A>
//void creat(A &p)
void list< A>::creat(A *p)
{
//class node *q;
//形参里的A就是这个程序的node类型
char ch = 0; //下数第4行cin>>ch 中的ch未定义,在此补充
A *q = NULL;
q=p; //必须新增这一句,q用于以后的动态分配
cout< < "input"< < endl;
cin>>ch;
// if(!p) //这个if放在while里会影响效率,故移到while外边,
改过程序之后,实际上用不着了// {
//p=new struct node;
//语法错误,形参里的A就是这个程序的node类型
// p = new A();
if(ch!='#')
p->data=ch;
// }
cin>>ch;
while(ch!='#')
{
//q->next=new class node;
//语法错误,形参里的A就是这个程序的node类型
q->next = new A();
//q->next=ch;
//这句应该是给data赋值
q->next->data = ch;
qq = q->next; //必须新增这一句,q用于以后的动态分配
cin>>ch;
}
q->next=NULL;
}
template < class T>
void list< T>::print(T *p)
{
if(p)
{
cout< < p->data< < " ";
print(p->next);
}
}
template < class T>
void list< T>::destroy(T *p)
{
if(p)
{
destroy(p->next);
delete p->next;
}
}
int main()
{
// NODEPTR p;
node< int> p;
// list L; 模版要有参数
list< node< int> > L;
L.creat(&p);
cout < < endl < < endl < < "show:" < < endl;
L.print(&p);
L.destroy(&p);
return 0;
}
关于C++中怎么实现一个单向链表问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。