第三周项目2—建立“顺序表”算法库
来源:互联网 发布:最全网络金融理财 编辑:程序博客网 时间:2024/06/06 01:20
(1)头文件 list.h[cpp] view plaincopyprint?01.#include <stdio.h> 02.#include <malloc.h> 03. 04.#define MaxSize 50 //Maxsize将用于后面定义存储空间的大小 05.typedef int ElemType; //ElemType在不同场合可以根据问题的需要确定,在此取简单的int 06.typedef struct 07.{ 08. ElemType data[MaxSize]; //利用了前面MaxSize和ElemType的定义 09. int length; 10.} SqList; 11. 12. 13.//声明自定义函数 14.void InitList(SqList *&L); //初始化顺序表 15.void ListInsert(SqList *L,int i,int b); //插入函数 16.void DispList(SqList *L); //输出函数 17.bool ListEmpty(SqList *L);//判定是否为空表ListEmpty(L) 18.void DestroyList(SqList *L);//释放线性表L占用的内存空间 19.int ListDelete(SqList *, int , int &); 20.bool ListEmpty(SqList *L); 21.int ListLength(SqList *L); 22.int LocateElem(SqList *l, ElemType e); 23.bool GetElem(SqList *l,int i,ElemType &e);
(2)源文件 list.cpp [cpp] view plaincopyprint?01.#include"list.h" 02.//输出线性表DispList(L) 03.void DispList(SqList *L) 04.{ 05. int i; 06. if (ListEmpty(L)) 07. return; 08. for (i=0; i<L->length; i++) 09. printf("%d ",L->data[i]); 10. printf("\n"); 11.} 12. 13.//判定是否为空表ListEmpty(L) 14.bool ListEmpty(SqList *L) 15.{ 16. return(L->length==0); 17.} 18. 19.//初始化顺序表InitList(*L) 20.void InitList(SqList *&L) 21.{ 22. L=(SqList *)malloc(sizeof(SqList));//这里申请了结点空间 23. L->length=0; 24. 25.} 26. 27.void ListInsert(SqList *L,int i,int b) //插入函数 28.{ 29. int j; 30. 31. if(i<1) 32. { 33. printf("插入位置非法/n"); 34. } 35. i=i-1; 36. if(L->length==0) 37. { 38. 39. L->data[i]=b; 40. L->length++; 41. } 42. 43. 44. else 45. { 46. for(j=L->length;j>i;j--) 47. { 48. L->data[j]=L->data[j-1]; 49. } 50. L->data[i]=b; 51. L->length++; 52. } 53. 54.} 55. 56.void DestroyList(SqList *L) 57.{ 58. free(L); 59. printf("线性表已经被释放!线性表的长度:%d",L->length); 60. printf("\n(由于线性表已经被释放所以显示的长度为随机值)"); 61.} 62. 63.int ListDelete(SqList *L, int i, int &e) 64.{ 65. i--; 66. int n=0; 67. while(n<i) 68. n++; 69. if(L->length>n) 70. { 71. e=L->data[n]; 72. while(n<L->length-1) 73. { 74. L->data[n]=L->data[n+1]; 75. n++; 76. 77. } 78. L->length--; 79. 80. } 81. return e; 82. 83.} 84.int ListLength(SqList *L) 85.{ 86. return L->length; 87.} 88. 89.bool GetElem(SqList *l,int i,ElemType &e) 90.{ 91. if(i<1||i>l->length) 92. return false; 93. e=l->data[i-1]; 94. return true; 95. 96.} 97.int LocateElem(SqList *l, ElemType e) 98.{ 99. int i=0; 100. while(l->length>i&&l->data[i]!=e) 101. { 102. i++; 103. } 104. if(i>=l->length) 105. { 106. return 0; 107. } 108. return i+1; 109.} #include"list.h"//输出线性表DispList(L)void DispList(SqList *L){ int i; if (ListEmpty(L)) return; for (i=0; i<L->length; i++) printf("%d ",L->data[i]); printf("\n");}//判定是否为空表ListEmpty(L)bool ListEmpty(SqList *L){ return(L->length==0);}//初始化顺序表InitList(*L)void InitList(SqList *&L){ L=(SqList *)malloc(sizeof(SqList));//这里申请了结点空间 L->length=0;}void ListInsert(SqList *L,int i,int b) //插入函数{ int j; if(i<1) { printf("插入位置非法/n"); } i=i-1; if(L->length==0) { L->data[i]=b; L->length++; } else { for(j=L->length;j>i;j--) { L->data[j]=L->data[j-1]; } L->data[i]=b; L->length++; }}void DestroyList(SqList *L){free(L);printf("线性表已经被释放!线性表的长度:%d",L->length);printf("\n(由于线性表已经被释放所以显示的长度为随机值)");}int ListDelete(SqList *L, int i, int &e){i--;int n=0;while(n<i)n++;if(L->length>n){e=L->data[n];while(n<L->length-1){L->data[n]=L->data[n+1];n++;}L->length--;}return e;}int ListLength(SqList *L){return L->length;}bool GetElem(SqList *l,int i,ElemType &e) { if(i<1||i>l->length) return false; e=l->data[i-1]; return true; } int LocateElem(SqList *l, ElemType e) { int i=0; while(l->length>i&&l->data[i]!=e) { i++; } if(i>=l->length) { return 0; } return i+1; }
(3)main函数 [cpp] view plaincopyprint?01.#include"list.h" 02.int main() 03.{ 04. SqList *sq; 05. int e,a,loc; 06. int i=2; 07. InitList(sq); 08. ListInsert(sq, 1, 5); 09. ListInsert(sq, 2, 3); 10. ListInsert(sq, 1, 4); 11. DispList(sq); 12. printf("线性表的长度:%d\n",ListLength(sq)); 13. if(GetElem(sq, 3, a)) //测试在范围内的情形 14. printf("找到了第3个元素值为:%d\n", a); 15. else 16. printf("第3个元素超出范围!\n"); 17. if((loc=LocateElem(sq, 8))>0) //测试能找到的情形 18. printf("找到了,值为8的元素是第 %d 个\n", loc); 19. else 20. printf("值为8的元素木有找到!\n"); 21. 22. ListDelete(sq,i,e); 23. printf("删除的元素是:%d\n",e); 24. printf("删除后的线性表:"); 25. DispList(sq); 26. DestroyList(sq); 27. return 0; 28.}
运行结果:
个人心得:
自己建立算法库更能好好的理解算法,这也是自己动手设计,自己更能深刻理解的一个很好的实践
0 0
- 第三周项目2—建立“顺序表”算法库
- 第三周项目2 建立顺序表算法库
- 第三周实践项目2-建立顺序表算法库
- 第三周项目2 建立顺序表的算法库
- 第三周项目2建立顺序表算法库
- 第三周项目2-建立“顺序表”算法库
- 第三周项目2-建立顺序表的算法库
- 第三周 项目2:建立顺序表的算法库
- 第三周项目2-建立“顺序表”算法库
- 第三周项目1、项目2: 顺序表的基本运算、建立“顺序表”算法库
- 第三周上机实践项目2——建立“顺序表”算法库
- 第三周项目2——建立顺序表的算法库
- 第三周项目2——建立顺序表的算法库
- 第三周项目2——建立顺序表的算法库
- 第三周项目二 建立“顺序表”算法库
- 第三周项目二 建立顺序表的算法库
- 第三周项目二 建立“顺序表”算法库
- 第三周 建立“顺序表”算法库
- 项目4--顺序表应用 问题二
- Oracle查看用户权限,回收权限命令
- stackoverflow页面不正常
- 【剑指Offer】文章索引(未完)
- 通过discuzX2.5 社区与java 的单点登录的实现(测试)
- 第三周项目2—建立“顺序表”算法库
- JAVA中字节流和字符流的区别 。
- Server 2008 R2安装 Vcenter
- 字符添加截取 超过8位自己截取,不够前面补0
- Android异步更新UI的方式之使用Handler的post(Runnabel r)方法
- Design Pattern 之 策略模式
- SpringMVC与Activiti网页流程设计器整合
- cocos2d-js 使用过程中遇到的问题总结
- 为什么在单例类中不能使用双重检查锁来初始化对象