您的位置:首页 > 理论基础 > 数据结构算法

数据结构—线性表

2016-03-10 16:41 405 查看
线性表示一种最简单的线性结构,线性的主要操作特点是可以在任意位置插入和删除一个数据元素

线性表:顺序存储结构,链式存储结构;

顺序存储结构:实现的链表称为顺序表

链式催促结构:实现的链表称为链表—>”单链表,循环单链表和双向循环链表”;

1.线性表的抽象数据类型

抽象数据类型是指一个逻辑概念上的类型和这个类型上的操作集合,而类型是一组值得集合。因此线性表的抽象数据类型主要包括:数据集合和数据集合上的操作集合

数据集合

线性表的数据集合可以表示为a0,a1,……an-1,类型为DataType;

操作集合

首先定义结构体Seqlist:

typedef struct
{
DataType list[MaxSize];
int size;
}Seqlist;


其中DataType为数组的数据类型,MaxSize表示数组元素的最大个数,list表示数组名,size表示顺序表当前存储的数据元素个数,且满足条件size<=Maxsize,Seqlist是结构体名。

(1).初始化ListInitiate(L)

void ListInitiate(Seqlist *L)      //初始化顺序表L
{
L->size=0;                     //定义初始数据元素个数,指针类型可以返回值
}


(2)求当前数据元素个数ListLength(L)

int listLength(SeqList L)       //返回顺序表L的当前数据元素个数
{
return L.size;
}


(3)插入数据元素个数ListInsert(L,i,x)

int ListInsert(Seqlist *L,int i,DataType x)//在顺序表L的第i(0<=i<=size)个位置插入数据元素x
{                                          //插入成功返回1,失败返回0;
int j;
if(L->size>=Maxsize)
{
printf("顺序表已满,无法插入!\n");
return 0;
}
else if(i<0||i>L->size)
{
printf("参数i不合法!\n");
return 0;
}
else
{
for(j=L->size;j>i;j--)//从后往前依次后移数据,为插入做准备
{
L->List[j]=L->List[j-1];
}
L->List[i]=x;      //插入x
L->size++;         //元素个数加1
return 1;
}
}


(4)删除数据元素ListDelete(L,i,x)

int ListDelete(Seqlist *L,int i,Datatype *x)
{
int j;
if(L->size<=0)
{
printf("顺序表已空,无数据可以删!\n");
return 0;
}
else if(i<0||i>L->size-1)
{
printf("参数i不合法!\n");
return 0;
}
else
{
*x=L->List[i];
for(j=i+1;j<=L->size-1;j++)
{
L->List[j-1]=L->List[j];
}
L->size--;
return 1;
}
}


(5)取数据元素ListGet(L,i,x)

int ListGet(SeqList L,int i,DataType *x)  //取顺序表L中的第i个元素存于x中,成功返回1,失败返回0
{
if(i<0||i>L->size-1)
{
printf("参数i不合法!\n");
return 0;
}
else
{
*x=L.list[i];
return 1;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: