第三周项目2 建设“顺序表”算法库
2015-09-21 17:17
375 查看
问题及代码:
2.list.h代码
3.list.cpp代码
运行结果:
知识点总结:
更加了解了指针的引用,而且采用的多文件组织形式,写程序感觉更条理,有逻辑性。
心得与体会:
以后可以通过建立算法库来提高效率问题
1.main.cpp代码
#include "list.h" int main() { SqList *sq; ElemType x[6]= {5,8,7,2,4,9}; CreateList(sq, x, 6); DispList(sq); return 0; }
2.list.h代码
#ifndef LIST_H_INCLUDED #define LIST_H_INCLUDED #define MaxSize 50 typedef int ElemType; typedef struct { ElemType data[MaxSize]; int length; } SqList; void CreateList(SqList *&L, ElemType a[], int n);//用数组创建线性表 void InitList(SqList *&L);//初始化线性表InitList(L) void DestroyList(SqList *&L);//销毁线性表DestroyList(L) bool ListEmpty(SqList *L);//判定是否为空表ListEmpty(L) int ListLength(SqList *L);//求线性表的长度ListLength(L) void DispList(SqList *L);//输出线性表DispList(L) bool GetElem(SqList *L,int i,ElemType &e);//求某个数据元素值GetElem(L,i,e) int LocateElem(SqList *L, ElemType e);//按元素值查找LocateElem(L,e) bool ListInsert(SqList *&L,int i,ElemType e);//插入数据元素ListInsert(L,i,e) bool ListDelete(SqList *&L,int i,ElemType &e);//删除数据元素ListDelete(L,i,e)#endif // LIST_H_INCLUDED #endif
3.list.cpp代码
#include <stdio.h> #include <malloc.h> #include "list.h" //用数组创建线性表 void CreateList(SqList *&L, ElemType a[], int n) { int i; L=(SqList *)malloc(sizeof(SqList)); for (i=0; i<n; i++) L->data[i]=a[i]; L->length=n; } //初始化线性表InitList(L) void InitList(SqList *&L) //引用型指针 { L=(SqList *)malloc(sizeof(SqList)); //分配存放线性表的空间 L->length=0; } //销毁线性表DestroyList(L) void DestroyList(SqList *&L) { free(L); } //判定是否为空表ListEmpty(L) bool ListEmpty(SqList *L) { return(L->length==0); } //求线性表的长度ListLength(L) int ListLength(SqList *L) { return(L->length); } //输出线性表DispList(L) void DispList(SqList *L) { int i; if (ListEmpty(L)) return; for (i=0; i<L->length; i++) cout<<L->date[i]<<' '; cout<<endl; } //求某个数据元素值GetElem(L,i,e) bool GetElem(SqList *L,int i,ElemType &e) { if (i<1 || i>L->length) return false; e=L->data[i-1]; return true; } //按元素值查找LocateElem(L,e) int LocateElem(SqList *L, ElemType e) { int i=0; while (i<L->length && L->data[i]!=e) i++; if (i>=L->length) return 0; else return i+1; } //插入数据元素ListInsert(L,i,e) bool ListInsert(SqList *&L,int i,ElemType e) { int j; if (i<1 || i>L->length+1) return false; //参数错误时返回false i--; //将顺序表逻辑序号转化为物理序号 for (j=L->length; j>i; j--) //将data[i..n]元素后移一个位置 L->data[j]=L->data[j-1]; L->data[i]=e; //插入元素e L->length++; //顺序表长度增1 return true; //成功插入返回true } //删除数据元素ListDelete(L,i,e) bool ListDelete(SqList *&L,int i,ElemType &e) { int j; if (i<1 || i>L->length) //参数错误时返回false return false; i--; //将顺序表逻辑序号转化为物理序号 e=L->data[i]; for (j=i; j<L->length-1; j++) //将data[i..n-1]元素前移 L->data[j]=L->data[j+1]; L->length--; //顺序表长度减1 return true; //成功删除返回true }
运行结果:
知识点总结:
更加了解了指针的引用,而且采用的多文件组织形式,写程序感觉更条理,有逻辑性。
心得与体会:
以后可以通过建立算法库来提高效率问题
相关文章推荐
- 查看下iPhone模拟器上接收和发送缓冲大小
- Java之集合类应用总结
- 第三周 项目1(2) 顺序表的基本运算
- 第三周 顺序表的应用(2)
- Android AndroidManifest 清单文件以及权限详解
- 获取数组中子串乘积的最大值
- daxpy dcopy计算
- Processes and Threads 进程与线程
- 代码先行-log4Net初体验
- 第三周项目1顺序表的基本运算3
- 第四周—项目3 - 单链表应用(1)逆置
- 安装lamp之 一键安装php
- 关于图像中的高低频成分与梯度及梯度方向的说明
- 巧设置ExpandableListView右边的箭头
- 第二周 项目2-程序的多文件组织
- 第三周项目4-顺序表得应用2
- 如何在mysql中优雅的解决精确到毫秒的问题?
- C++ 支持的一些重要运算符及运算符优先级
- iOS使用CoreMotion实现摇一摇功能
- ThreadLocal