您的位置:首页 > 其它

第三周项目2——建立顺序表的算法库

2016-09-18 10:47 204 查看
/*

* Copyright (c)2016,烟台大学计算机与控制工程学院

* All rights reserved.

* 文件名称:w.cpp

* 作 者:武昊

* 完成日期:2016年9月18日

* 版 本 号:v1.0

*问题描述:请采用程序的多文件组织形式,在项目1的基础上,建立

如上的两个文件,另外再建立一个源文件,编制main函

数,完成相关的测试工作。

*输入描述:无

*程序输出:数据

*/

list.h:

#define Maxsize 100

typedef int Elemtype; //自定义数据类型

typedef struct list

{

Elemtype data[Maxsize]; //存顺序表元素

int length; //存顺序表长度

} Sqlist;

void CreateList(Sqlist *&l,Elemtype a[],int n); //由a中的n个元素建立顺序表

void DispList(Sqlist *l); //输出线性表

bool ListEmpty(Sqlist *l); //布尔型函数判断顺序表是否为空表

int ListLength(Sqlist *l); //求顺序表长度

bool GetElem(Sqlist *l,int i,Elemtype &e); //求顺序表中某个数据元素值

int LocateElem(Sqlist *l,Elemtype e); //按元素值查找顺序表中元素

bool ListInsert(Sqlist *&l,int i,Elemtype e); //插入数据元素

bool ListDelete(Sqlist *&l,int i,Elemtype &e); //删除数据元素

void InitList(Sqlist *&l); //初始化线性表

void DestroyList(Sqlist *&l); //销毁顺序表

list.cpp

#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++)

printf("%d ",L->data[i]);

printf("\n");

}

//求某个数据元素值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

}

main.cpp:

#include "list.h"

int main()

{

SqList *sq;

ElemType E;

printf("初始化线性表\n");

InitList(sq);

printf("在第1个位置插入元素1\n");

ListInsert(sq, 1, 1);

DispList(sq);

printf("在第2个位置插入元素6\n");

ListInsert(sq, 2, 6);

DispList(sq);

printf("在第1个位置插入元素9\n");

ListInsert(sq, 1, 9);

DispList(sq);

printf("删除第2个位置的元素\n");

ListDelete(sq,2,E);

DispList(sq);

printf("销毁线性表\n");

DestroyList(sq);

DispList(sq);

}

运行结果:



知识点总结:

程序的多文件组织可以让我们更快的建立算法库。

学习心得:

利用多文件组织从而建立算法库,可以让我们更方便。



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: