数据结构之自建算法库——顺序表

上海杰彻自动化设备有限公司 发布时间:2017-09-08 23:10:00
数据结构之自建算法库——顺序表

  学习《数据结构》课程的过程中,同步开展实践。对每一种逻辑结构,实现其各种存储结构下的基本运算,是一项基础性的工作。学习方法建议请参考“0207将算法变程序”[视频]部分建议的方法
  本文为算法库中的第一个,针对线性表中的顺序存储结构,实现各种基本运算。
  算法库包括两个文件:
  ? 头文件:list.h,包含定义顺序表数据结构的代码、宏定义、要实现算法的函数的声明;
  ? 源文件:list.cpp,包含实现各种算法的函数的定义
  
list.h

#ifndef LIST_H_INCLUDED #define LIST_H_INCLUDED #include #include #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

list.cpp

#include #include #include list.h //用数组创建线性表 void CreateList(SqList *&L, ElemType a[], int n) int i; L=(SqList *)malloc(sizeof(SqList)); for (i=0; idata[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; ilength; i++) printf(%d ,L->data[i]); printf( ); //求某个数据元素值GetElem(L,i,e) bool GetElem(SqList *L,int i,ElemType &e) 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 (ilength && 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 //删除数据元素ListDelete(L,i,e) bool ListDelete(SqList *&L,int i,ElemType &e) i>L->length) //参数错误时返回false return false; i--; //将顺序表逻辑序号转化为物理序号 e=L->data[i]; for (j=i; jlength-1; j++) //将data[i..n-1]元素前移 L->data[j]=L->data[j+1]; L->length--; //顺序表长度减1 return true; //成功删除返回true

  
  可以在另外的文件中,定义代码,使用这些基础设施中的成果了。
  例如,设计mian.cpp用于测试:
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; }

企业建站2800元起,携手武汉肥猫科技,做一个有见地的颜值派!更多优惠请戳:武汉网站优化 https://www.feimao666.com

  • 上一篇:Python学习笔记之九——错误与异常
  • 下一篇:最后一页
  •