您的位置:首页 > 其它

第三周项目2--建设“顺序表”的算法库

2016-09-17 21:07 239 查看
问题及代码:

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

* All rights reserved.

* 文件名称:项目2.cpp

* 作 者:陈哲

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

* 版 本 号:v1.0

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

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

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

*输入描述:无

*程序输出:依据各个函数而定

头文件:list.h

#define MaxSize 50

#include <stdio.h>

#include <malloc.h>

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

源文件: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函数

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

}

运行结果:



知识点总结:
采用程序的多文件组织形式,建设了自己的算法库。
学习心得:
练习了顺序表的基本运算,运用算法库会解决接下来的很多问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: