鱼C论坛

 找回密码
 立即注册
查看: 2856|回复: 5

[技术交流] 给大家发福利,循序表“类”及应用

[复制链接]
发表于 2013-9-11 15:39:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 刹那芳华 于 2013-9-11 15:41 编辑
  1. #include <iostream>

  2. using namespace std;
  3. template <class T>
  4. class SeqList;


  5. template <class T>
  6. class SeqList
  7. {
  8. public:
  9. T *element;
  10. int size;
  11. int len;
  12. public:
  13. SeqList(int size = 64);
  14. SeqList(T value[],int n);
  15. ~SeqList();
  16. bool isEmpty();
  17. int length();
  18. T get(int i);
  19. bool set(int i,T x);
  20. /* void display(SeqList<T> &list)
  21. {
  22. for(int i=0;i<list.len;i++)
  23. {
  24. cout<<element[i]<<",";
  25. }
  26. }*/
  27. friend ostream& operator << (ostream&,const SeqList<T>&);
  28. void insert(int i,T x);
  29. void insert(T x);
  30. bool remove(int i,T& old);
  31. void clear();
  32. };
  33. template <class T>
  34. SeqList<T>::SeqList(int size)
  35. {
  36. this->size = size<64?64:size;
  37. this->element = new T[this->size];
  38. this->len = 0;
  39. }
  40. template <class T>
  41. SeqList<T>::SeqList(T value[],int n)
  42. {
  43. if(n>0)
  44. {
  45. this->element = new T[2*n];
  46. this->size = 2*n;
  47. for(int i=0;i<n;i++)
  48. this->element[i] = value[i];
  49. this->len = n;
  50. }
  51. };
  52. template <class T>
  53. ostream & operator<<(ostream & out,SeqList<T> &list)
  54. {
  55. out<<"(";
  56. if(list.len>0)
  57. {
  58. out<<list.element[0];
  59. for(int i = i;i<list.len;i++)
  60. out<<","<<list.element[i];
  61. }
  62. out<<")\n";
  63. return out;
  64. }
  65. template <class T>
  66. SeqList<T>::~SeqList()
  67. {
  68. delete []this->element;
  69. }
  70. template <class T>
  71. bool SeqList<T>::isEmpty()
  72. {
  73. return len == 0;
  74. }
  75. template <class T>
  76. int SeqList<T>::length()
  77. {
  78. return len;
  79. }
  80. template <class T>
  81. T SeqList<T>::get(int i)
  82. {
  83. if(i>=0&&i<len)
  84. return element[i];
  85. throw "参数i指定的元素序号无效";
  86. }
  87. template <class T>
  88. bool SeqList<T>::set(int i,T x)
  89. {
  90. if(i>=0&&i<len)
  91. {
  92. element[i] = x;
  93. return true;
  94. }
  95. return false;
  96. };


  97. template <class T>
  98. void SeqList<T>::insert(int i, T x)
  99. {
  100. if(len==size)
  101. {
  102. T *temp = element;
  103. element = new T[size*2];
  104. for(int i=0;i<size;i++)
  105. element[i]=temp[i];
  106. //size* = 2;
  107. }
  108. if(i<0) i = 0;
  109. if(i>len) i = len;
  110. for(int j = len-1;j>=i;j--)
  111. element[j+1]=element[i];
  112. element[i] = x;
  113. len++;
  114. }
  115. template <class T>
  116. void SeqList<T>::insert(T x)
  117. {
  118. insert(len,x);
  119. }
  120. template <class T>
  121. bool SeqList<T>::remove(int i,T &old)
  122. {
  123. if(len>0&&i>=0&&i<len)
  124. {
  125. old = element[i];
  126. for(int j = i;j<len;j++)
  127. element[j] = element[j+1];
  128. len--;
  129. return true;
  130. }
  131. return false;
  132. }
  133. template <class T>
  134. void SeqList<T>::clear()
  135. {
  136. len = 0;
  137. }
复制代码
上面是顺序表类
下面是调用这个类解决问题,比如约瑟夫环问题,这只是举个例子,还可以有很多用法


  1. #include "SeqList.h"
  2. void josephus(int number,int start,int distance)
  3. {
  4. SeqList<char> jose(number);
  5. int i=0;
  6. for(i = 0;i<number;i++)
  7. {
  8.   jose.insert('A'+i);
  9. }
  10. cout<<"约瑟夫环("<<number <<","<<start<<","<<distance<<"),"<<jose;
  11. i = start;
  12. while(jose.length()>1)
  13. {
  14.   i = (i+distance - 1)%jose.length();
  15.   char old;
  16.   if(jose.remove(i,old))
  17.    cout<<"删除"<<old<<",";
  18.    cout<<jose;
  19. }
  20. cout<<"被赦免的是"<<jose.get(0)<<"\n";
  21. }
  22. int main()
  23. {
  24.     josephus(5,0,2);
  25.     return 0;
  26. }
复制代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-9-11 15:41:49 | 显示全部楼层
2楼还是我的,有问题大家可以互相交流
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-15 11:44:45 | 显示全部楼层
路过看一看有什么好东西收藏一下,强烈支持楼主ing……37733
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-15 20:17:35 | 显示全部楼层
学习了学习了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-22 09:03:53 | 显示全部楼层
顶起,代码真整洁,如在加一点注释就更完美了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-23 14:54:57 | 显示全部楼层
学习了 ~~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-26 15:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表