C 单向链表实现代码解读
创始人
2024-06-23 00:10:44
0

C++编程语言是一款应用广泛的计算机应用语言。我们在这篇文章中为大家介绍的是关于C++单向链表的实现方法。希望初学者们可以通过本文介绍的内容充分掌握这方面的知识,并从中体验到这款语言功能的强大。

C++单向链表实现代码:

  1. #include < iostream>   
  2. using namespace std;   
  3. template < class T>   
  4. struct node   
  5. {   
  6. //public:   
  7. // 结构体成员默认就是public的  
  8. T data;   
  9. node< T> *next;   
  10. };   
  11. //typedef struct node NODE;   
  12. //typedef NODE *NODEPTR;   
  13. //typedef后面要跟具体的类类型,而不是一个类模版。eg: typedef node< T> 
    NODE (C++中,实例化结构体时struct可省略)  
  14. template < class T>   
  15. class list   
  16. {   
  17. public:  
  18. //以下三个函数要供外部调用,所以要声明为public,class默认为private。  
  19. /*  
  20. void creat(T &p);   
  21. void print(T p);   
  22. void destroy(T &p);   
  23. */  
  24. //这三个函数的参数有问题,按照下文的实现,我认为应改为如下:  
  25. void creat(T *p);  
  26. void print(T *p);  
  27. void destroy(T *p);  
  28. };   
  29. template< class A>   
  30. //void creat(A &p)   
  31. void list< A>::creat(A *p)  
  32. {   
  33. //class node *q;   
  34. //形参里的A就是这个程序的node类型  
  35. char ch = 0; //下数第4行cin>>ch 中的ch未定义,在此补充  
  36. A *q = NULL;  
  37. q=p; //必须新增这一句,q用于以后的动态分配  
  38. cout< < "input"< < endl;   
  39. cin>>ch;  
  40. // if(!p) //这个if放在while里会影响效率,故移到while外边,
    改过程序之后,实际上用不着了  
  41. // {   
  42. //p=new struct node;   
  43. //语法错误,形参里的A就是这个程序的node类型  
  44. // p = new A();  
  45. if(ch!='#')  
  46. p->data=ch;   
  47. // }   
  48. cin>>ch;  
  49. while(ch!='#')   
  50. {   
  51. //q->next=new class node;   
  52. //语法错误,形参里的A就是这个程序的node类型  
  53. q->next = new A();  
  54. //q->next=ch;   
  55. //这句应该是给data赋值  
  56. q->next->data = ch;  
  57. qq = q->next; //必须新增这一句,q用于以后的动态分配  
  58. cin>>ch;   
  59. }   
  60. q->next=NULL;   
  61. }   
  62. template < class T>   
  63. void list< T>::print(T *p)   
  64. {   
  65. if(p)   
  66. {   
  67. cout< < p->data< < " ";   
  68. print(p->next);   
  69. }   
  70. }  
  71. template < class T>   
  72. void list< T>::destroy(T *p)   
  73. {   
  74. if(p)   
  75. {   
  76. destroy(p->next);   
  77. delete p->next;   
  78. }   
  79. }   
  80. int main()   
  81. {   
  82. // NODEPTR p;   
  83. node< int> p;  
  84. // list L; 模版要有参数  
  85. list<  node< int> > L;  
  86. L.creat(&p);   
  87. cout < <  endl < <  endl < <  "show:" < < endl;  
  88. L.print(&p);   
  89. L.destroy(&p);  
  90. return 0;   

实现C++单向链表时,程序使用了指针,如果改用引用更好些。

【编辑推荐】

  1. C++函数对象与函数指针不同之处
  2. C++ sprintf格式化解决方法详解
  3. C++ Doxygen实现功能分享
  4. C++剪切板常用应用技巧分享
  5. C++链栈模板应用代码解读

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...