10_87.cpp
上传用户:zipjojo
上传日期:2009-07-20
资源大小:70k
文件大小:3k
源码类别:

文章/文档

开发平台:

C/C++

  1. #include<iostream.h>
  2. struct element
  3. {  //定义节点结构
  4. int val;  //数据元素域
  5. element *next;  //链指针域
  6. };
  7. class list
  8. {  //list类定义
  9. element *elems;  //elems为当前标识指针
  10. public:
  11. list(){elems=0;}
  12. ~list();  //析构函数
  13. virtual bool insert(int val);  //虚函数
  14. virtual bool deletes(int val);  //虚函数
  15. bool contain(int val);
  16. virtual void print();
  17. };
  18. class set:public list
  19. {
  20. int card;
  21. public:
  22. set(){card=0;};
  23. bool insert(int val);
  24. bool deletes(int val);
  25. void print();
  26. };
  27. list::~list()
  28. {
  29. element *tmp=elems;
  30. for(element *elem=elems;elem!=NULL;)
  31. {  //循环释放各元素所占的内存
  32. tmp=elem;
  33. elem=elem->next;
  34. delete tmp;
  35. }
  36. }
  37. bool list::insert(int val)
  38. {  //插入元素函数
  39. element *elem=new element;  //分配内存
  40. if(elem!=NULL)
  41. {  //将新元素插入到当前标识指针elems处
  42. elem->val=val;
  43. elem->next=elems;
  44. elems=elem;
  45. return true;
  46. }
  47. else return false;
  48. }
  49. bool list::deletes(int val)
  50. {  //删除元素函数
  51. if (elems==NULL)   //如链表为空返回false
  52. return false;
  53. element *tmp=elems;
  54. if(elems->val==val)
  55. {
  56. elems=elems->next;
  57. delete tmp;
  58. return true;
  59. }
  60. else
  61. for(element *elem=elems;elem->next!=NULL;elem=elem->next)
  62. if(elem->next->val==val)
  63. {
  64. tmp=elem->next;
  65. elem->next=tmp->next;
  66. delete tmp;
  67. return true;
  68. }
  69. return false;
  70. }
  71. bool list::contain(int val)
  72. {  //判断元素val在链表中是否存在
  73. if(elems==NULL)
  74. return false;
  75. if (elems->val==val)
  76. return true;
  77. else
  78. for(element *elem=elems;elem->next!=NULL;elem=elem->next)
  79. if(elem->next->val==val)
  80. return true;
  81. return false;
  82. }
  83. void list::print()
  84. {  //输出链表的各元素
  85. cout<<"调用基类的print()函数!"<<endl;
  86.     cout<<"链表元素为:";
  87. if(elems==NULL) 
  88. return;
  89. for(element *elem=elems;elem!=NULL;elem=elem->next)
  90. cout<<elem->val<<" ";
  91. cout<<endl;
  92. }
  93. bool set::insert(int val)
  94. {
  95. if(!contain(val) && list::insert(val))
  96. {
  97. ++card;
  98. return true;
  99. }
  100. return false;
  101. }
  102. bool set::deletes(int val)
  103. {
  104. if(list::deletes(val))
  105. {
  106. --card;
  107. return true;
  108. }
  109. return false;
  110. }
  111. void set::print()
  112. {
  113. cout<<"调用派生类的print()函数!"<<endl;
  114. cout<<"集合元素为:";
  115. list::print();
  116. cout<<"集合元素个数为:"<<card;
  117. cout<<endl;
  118. }
  119. void main()
  120. {
  121. list *p,list1;
  122. set set1;
  123. p=&list1;
  124. p->insert(12);
  125. p->insert(34);
  126. p->insert(56);
  127. p->insert(78);
  128. p->insert(90);
  129. p->print();
  130. p->deletes(56);
  131. p->deletes(40);
  132. p->print();
  133. cout<<endl;
  134. p=&set1;
  135. p->insert(123);
  136. p->insert(234);
  137. p->insert(345);
  138. p->insert(123);
  139. p->print();
  140. p->deletes(123);
  141. p->deletes(456);
  142. p->print();
  143. }