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

头文件list.h:

#ifndef LIST_H_INCLUDED//防止重复定义出错
#define LIST_H_INCLUDED

#include <stdio.h>//必要的库文件包括
#include <malloc.h>
#define MaxSize 50   //必要的宏定义

                     //声明实现算法的自定义函数,以及其他必要的自定义函数
typedef int ElemType;//将ElemType定义为int类型
typedef struct//用来存储顺序表的结构体Sq
{
	ElemType data[MaxSize];//定义一个数组用来存储,int型
	int length;//顺序表的长度
}SqList;


bool ListEmpty(SqList *L);//———————————————判断线性表是否为空ListEmpty
void DispList(SqList *&L);//———————————————输出线性表DispList
void CreateList(SqList *&L,ElemType a[],int n);//———— 1.建立线性表CreateList
void InitList(SqList * &L);//—————————————— 2.初始化线性表InitList
void DestroyList(SqList * &L);//—————————————3.销毁线性表DestroyList
bool ListInsert(SqList *&L,int i,ElemType &e);//—————4.插入数据元素ListInsert
bool ListDelete(SqList *&L,int i,ElemType &e);//—————5.删除数据元素ListDelete
int ListLength(SqList *&L);//—————————————— 6.求线性表的长度ListLength的
bool GetElem(SqList *&L,int i,ElemType &e);//—————— 7.求线性表L中指定位置(e)的某个数据元素GetElem
int LocateElem(SqList *&L,ElemType e);//—————————8.查找元素LocateElem

#endif//最前面两行的结束语句

 

函数文件list.cpp:

#include"list.h"//包含头文件

//定义各个自定义函数
void CreateList(SqList *&L,ElemType a[],int n)//————————1.“建立线性表”的算法CreateList
{
	int i;
	L=(SqList *)malloc(sizeof(SqList));//分配空间
	for(i=0;i<n;i++)//把数组的值赋予线性表
		L->data[i]=a[i];
	L->length=n;//赋予表长
}

bool ListEmpty(SqList *L)//——————————实现判断线性表是否为空的算法ListEmpty
{
	if(L->length==0)
	{
		printf("线性表为空\n");
		return true;
	}
	else 
		return false;
}

void DispList(SqList *&L)//——————————实现“输出线性表”的算法DispList
{
	int i;
	if(ListEmpty(L))//判断是不是空表
		return;
	for (i=0; i<L->length; i++) //输出 
        printf("%d ",L->data[i]);  
    printf("\n");  //换行

}

void InitList(SqList * &L)//————————————2.初始化线性表InitList
{
	L=(SqList *)malloc(sizeof(SqList));
	L->length=0;
}

void DestroyList(SqList * &L)//————————————3.销毁线性表DestroyList
{
	free(L);
}

bool ListInsert(SqList *&L,int i,ElemType &e)//————————————4.插入数据元素ListInsert
{
	if(i<1||i>L->length)
		return false;
	i--;
	for(int j=L->length;j>i;j--)
	{
		L->data[j]=L->data[j-1];
	}
	L->length++;
	L->data[i]=e;
	return true;
}

bool ListDelete(SqList *&L,int i,ElemType &e)//————————————5.删除数据元素ListDelete
{
	if(i<1||i>L->length)
		return false;
	i--;
	e=L->data[i];
	for(int j=i;j<L->length-1;j++)
		L->data[j]=L->data[j+1];
	L->length--;
	return true;
}

int ListLength(SqList *&L)//————————————6.增加求线性表的长度ListLength的函数
{
	return(L->length);
}

bool GetElem(SqList *&L,int i,ElemType &e)//————————————7.增加求线性表L中指定位置(e)的某个数据元素GetElem的函数
{
	if(i<1||i>L->length)
		return false;
	e=L->data[i-1];
	return true;
}

int LocateElem(SqList *&L,ElemType e)//————————————8.增加查找元素LocateElem的函数
{
	int i=0;
	while(i<L->length&&L->data[i]!=e)
		i++;
	if(i>=L->length)
		return 0;
	else
		return i+1;
}

 

用于测试的主函数mian.cpp:

#include"list.h"//包含头文件

//定义用于驱动测试的main函数
int main()
{
	int i;
	ElemType e;
	SqList *sq;//定义一顺序表,结构体
	ElemType x[6]={1,2,3,4,5,6};//定义一个数组并赋值

	//1.
    CreateList(sq, x, 6);//调用“建立线性表”
    DispList(sq);//调用“输出线性表”
	ListEmpty(sq);//判断线性表是否为空
	//2.
	InitList(sq);//初始化线性表
	DispList(sq);//调用“输出线性表”
	//3.
	CreateList(sq, x, 6);//调用“建立线性表”
	DestroyList(sq);//销毁线性表
	DispList(sq);//调用“输出线性表”
	//4.
	i=2;
	e=5;
	CreateList(sq, x, 6);//调用“建立线性表”
	ListInsert(sq,i,e);//插入数据元素
	DispList(sq);//调用“输出线性表”
	//5.
	ListDelete(sq,i,e);//删除数据元素
	DispList(sq);//调用“输出线性表”
	//6.
	int l;
	l=ListLength(sq);//求线性表的长度
	printf("%d ",l);
	printf("\n");
	//7.
	int n;
	GetElem(sq,i,n);//求线性表L中指定位置(e)的某个数据元素
	printf("%d ",n);
	printf("\n");
	//8.
	int m;
	m=LocateElem(sq,e);//查找元素
	printf("%d ",m);
	printf("\n");


    return 0;
}

运行结果:

总结:运行结果来看和原来是没有什么差别的,需要注意的是头文件里防止重新定义的几个语句,类似的extern也可以帮助这类情况

#ifndef LIST_H_INCLUDED//防止重复定义出错
#define LIST_H_INCLUDED

#endif
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值