第三周项目(5):建设“顺序表”算法库

问题及代码:

list.h

/*   
*烟台大学计算机与控制工程学院    
*作    者:杨宁   
*完成日期:2015年9月17日
*问题描述:本文为算法库中的第一个,针对线性表中的顺序存储结构,实现各种基本运算。 
         算法库包括两个文件: 
         头文件:list.h,包含定义顺序表数据结构的代码、宏定义、要实现算法的函数的声明; 
         源文件:list.cpp,包含实现各种算法的函数的定义 
           采用程序的多文件组织形式,完成相关测试工做。
    
*/
#include<stdio.h>
#include<malloc.h>
#define Maxsize 50
typedef int ElemType;
typedef struct
{
	ElemType data[Maxsize];
	int length;
}SqList;
//自定义函数声明部分
void CreatList(SqList *&L,ElemType a[],int n);//用数组创建线性表
void DispList(SqList *L);//输出线性表DisList(L)
bool ListEmpty(SqList *L);//判断是否为空表ListEmpty(L)
int ListLength(SqList * L);//判断线性表的长度
bool GetElem(SqList * L,int i,ElemType &e);//求某个数据的值
int LocateElem(SqList * L,ElemType e);//按元素查找数据
void InitList(SqList *&L);//初始化线性表   
bool ListInsert(SqList *&L,int i,ElemType e);//插入数据元素 
bool ListDelete(SqList *&L,int i,ElemType &e);//删除数据元素
void DestroyList(SqList *&L);//销毁线性表
list.cpp
#include"list.h"
void CreatList(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; 
}
void DispList(SqList *L)//输出线性表DisList(L)
{
	int i;
	for(i=0;i<L->length;i++)
		printf("%d ",L->data[i]);
	printf("\n");
}
bool ListEmpty(SqList *L)//判断是否为空表ListEmpty(L)
{
	return(L->length==0);
}
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 (i<L->length && L->data[i]!=e) 
		i++;
    if (i>=L->length)
        return 0;
    else
        return i+1;
}  
void InitList(SqList *&L)//初始化线性表   
{  
    L=(SqList *)malloc(sizeof(SqList));  
    L->length=0;  
}  
bool ListInsert(SqList *&L,int i,ElemType e)//插入数据元素   
{  
    int j;  
    if(i<1||i>L->length+1)  
        return false;  
    i--;  
    for(j=L->length;j>i;j--)  
        L->data[j]=L->data[j-1];  
    L->data[i]=e;  
    L->length++;  
    return true;  
}  
bool ListDelete(SqList *&L,int i,ElemType e)//删除数据元素
{
	int j;
	if(i<1||i>L->length-1)
		return false;
	i--;
	e=L->data[i];
	for(j=i;j<L->length-1;j++)
		L->data[j]=L->data[j+1];
	L->length--;
	return true;
}
void DestroyList(SqList *&L)//销毁数据
{
	free(L);
}

main.cpp(main函数可以多种设计,在此提供一种)

#include "list.h"
int main()
{
    SqList *sq;
    ElemType x[6]= {5,8,7,2,4,9};
    CreatList(sq, x, 6);
    DispList(sq);
    return 0;
}


运行结果:


知识点及总结:

主要概括了线性表的10种算法,并且练习了用多文件组织程序

学习心得;

这10种算法用的更熟练了,多文件组织程序这种方式也越来越习惯了。

你可能感兴趣的:(第三周项目(5):建设“顺序表”算法库)