clList.cpp
上传用户:zbhuiyi
上传日期:2013-06-17
资源大小:13k
文件大小:2k
源码类别:

Email服务器

开发平台:

Visual C++

  1. //#include "iostream.h"
  2. typedef struct node {
  3. int data;
  4. struct node *next;
  5. }ST_node;
  6. //class declare:
  7. class clList;
  8. //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  9. //Linked list class
  10. //the head node doesn't store any data
  11. class clList
  12. {
  13. public:
  14. static ST_node *ArrayToList(int array[],int length);
  15. static int CountNode(ST_node *pHead);
  16. static void Invert(ST_node *pHead);
  17. static void Show(ST_node *pHead);
  18. static void FreeList(ST_node *pHead);
  19. };
  20. //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  21. //函数实现:
  22. //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  23. ST_node* clList::ArrayToList(int array[],int length)
  24. {
  25. ST_node *pHead,*pPrev,*pThis;int i;
  26. if (length==0) {return NULL;}
  27. pHead=new ST_node;
  28. pPrev=pHead;
  29. for (i=0; length; i++,length--){
  30. pPrev->next=new ST_node;
  31. pThis=pPrev->next;
  32. pThis->data=array[i];
  33. pPrev=pThis;
  34. }
  35. pThis->next=NULL;
  36. return pHead;
  37. }
  38. //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  39. //count the node of a list(except the head node)
  40. int clList:: CountNode(ST_node *pHead)
  41. {
  42. ST_node *pTemp;int count=0;
  43. pTemp=pHead->next;
  44. while (pTemp){
  45. count++;
  46. pTemp=pTemp->next;
  47. }
  48. return count;
  49. }
  50. //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  51. void clList::Show(ST_node *pHead)
  52. {
  53. ST_node *ptemp;
  54. ptemp=pHead->next;
  55. while (ptemp){
  56. cout << ptemp->data;
  57. ptemp=ptemp->next;
  58. }
  59. }
  60. //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  61. //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  62. //invert a list(the head node remain)
  63. void clList:: Invert(ST_node *pHead)
  64. {
  65. ST_node *pPrev,*pThis,*ptemp;
  66. pPrev=pHead->next;
  67. pThis=pPrev->next;
  68. pPrev->next=NULL;
  69. while (pThis){
  70. ptemp=pThis->next;
  71. pThis->next=pPrev;
  72. pPrev=pThis;pThis=ptemp;
  73. }
  74. pHead->next=pPrev;
  75. }
  76. //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  77. //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  78. //free the list
  79. void clList::FreeList(ST_node *pHead)
  80. {
  81. ST_node *pThis,*pPrev;
  82. pPrev=pHead;
  83. pThis=pPrev->next;
  84. while (pThis){
  85. delete pPrev;
  86. pPrev=pThis;
  87. pThis=pThis->next;
  88. }
  89. delete pPrev;
  90. }
  91. //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<