您的位置:首页 > 其它

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

2016-09-13 13:51 447 查看
/*
*Copyright(c)2016,烟台大学计算机与控制工程学院
*文件名称:main.cpp
*作者:黄玉娇
*完成日期:2016年9月13日
*版本号:v1.0
*
*问题描述:测试“建立线性表”的算法CreateList,
实现“输出线性表”的算法DispList。
实现判断线性表是否为空的算法ListEmpty
增加求线性表的长度ListLength的函数并测试;
  增加求线性表L中指定位置的某个数据元素GetElem的函数并测试;
  增加查找元素LocateElem的函数并测试;
插入数据元素ListInsert;
删除数据元素ListDelete;
初始化线性表InitList;
销毁线性表DestroyList;

采用多文件的形式。

*
*输入描述:输入你要查找的元素和你要查找的位置
*程序输出:给出所查找的数据元素的位置,以及给出的位置的元素
*/





list.h

#ifndefLIST_H_INCLUDED
#defineLIST_H_INCLUDED

#defineMaxSize50
typedefintElemType;
typedefstruct
{
ElemTypedata[MaxSize];
intlength;
}SqList;
voidCreateList(SqList*&L,ElemTypea[],intn);//用数组创建线性表
voidInitList(SqList*&L);//初始化线性表InitList(L)
voidDestroyList(SqList*&L);//销毁线性表DestroyList(L)
boolListEmpty(SqList*L);//判定是否为空表ListEmpty(L)
intListLength(SqList*L);//求线性表的长度ListLength(L)
voidDispList(SqList*L);//输出线性表DispList(L)
boolGetElem(SqList*L,inti,ElemType&e);//求某个数据元素值GetElem(L,i,e)
intLocateElem(SqList*L,ElemTypee);//按元素值查找LocateElem(L,e)
boolListInsert(SqList*&L,inti,ElemTypee);//插入数据元素ListInsert(L,i,e)
boolListDelete(SqList*&L,inti,ElemType&e);//删除数据元素ListDelete(L,i,e)#endif//LIST_H_INCLUDED
#endif

list.cpp

#include<stdio.h>
#include<malloc.h>
#include"list.h"

//用数组创建线性表
voidCreateList(SqList*&L,ElemTypea[],intn)
{
inti;
L=(SqList*)malloc(sizeof(SqList));
for(i=0;i<n;i++)
L->data[i]=a[i];
L->length=n;
}

//初始化线性表InitList(L)
voidInitList(SqList*&L)//引用型指针
{
L=(SqList*)malloc(sizeof(SqList));
//分配存放线性表的空间
L->length=0;
}

//销毁线性表DestroyList(L)
voidDestroyList(SqList*&L)
{
free(L);
}

//判定是否为空表ListEmpty(L)
boolListEmpty(SqList*L)
{
return(L->length==0);
}

//求线性表的长度ListLength(L)
intListLength(SqList*L)
{
return(L->length);
}

//输出线性表DispList(L)
voidDispList(SqList*L)
{
inti;
if(ListEmpty(L))return;
for(i=0;i<L->length;i++)
printf("%d",L->data[i]);
printf("\n");
}

//求某个数据元素值GetElem(L,i,e)
boolGetElem(SqList*L,inti,ElemType&e)
{
if(i<1||i>L->length)returnfalse;
e=L->data[i-1];
returntrue;
}

//按元素值查找LocateElem(L,e)
intLocateElem(SqList*L,ElemTypee)
{
inti=0;
while(i<L->length&&L->data[i]!=e)i++;
if(i>=L->length)return0;
elsereturni+1;
}

//插入数据元素ListInsert(L,i,e)
boolListInsert(SqList*&L,inti,ElemTypee)
{
intj;
if(i<1||i>L->length+1)
returnfalse;//参数错误时返回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
returntrue;//成功插入返回true
}

//删除数据元素ListDelete(L,i,e)
boolListDelete(SqList*&L,inti,ElemType&e)
{
intj;
if(i<1||i>L->length)//参数错误时返回false
returnfalse;
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
returntrue;//成功删除返回true
}

设计main.cpp用于测试:

main.cpp:

#include"list.h"
intmain()
{
SqList*sq;
ElemTypex[6]={5,8,7,2,4,9};
CreateList(sq,x,6);
DispList(sq);
return0;
}

运行结果:



知识点总结:

 顺序表的基本运算

学习心得:

 对顺序表的学习有待加强!


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