您的位置:首页 > 其它

线性表——顺序表

2018-03-17 11:18 183 查看

顺序表的结构体类型

typedef struct
{
ElemType data[MAXSIZE];  //存放线性表的长度
int length;  //记录顺序表的长度
}SqList;

顺序表运算的基本实现

顺序表的创建

void CreatList(SqList *&L, ElemType a[], int n) //由a中的n个元素建立顺序表
{
int i=0,k=0; //k表示a中元素的个数,初始值为0
L=(SqList *)malloc(sizeof(SqList));//分配线性表的空间
while(i<n)
{
L->data[i]=a[i];
k++;
j++;
}
L->length=k;  //设置线性表的长度
}

顺序表的基本运算方法

1. 初始化线性表

void InitList(SqList *&L)
{
L=(SqList *)malloc(sizeof(SqList));
L->length=0;
}

2. 销毁线性表

void DestoryList(SqList *&L)
{
free(L);
}

3. 判断线性表是否为空

bool ListEmpty(Sqlist *L)
{
return(L->length==0);
}

4. 插入数据元素

bool ListInsert(SqList *&L, ElemType e, int i)
{
int j;
if(i<1||i>L->length+1)
return false;
i--;        //将顺序表逻辑序号转化为物理序号
for(j=L->length;j>i;j--) //将data[i]及后面的元素后移一个位置
L->data[j]=L->data[j-1];
L->data[i]=e;
L->length++;
return true;
}

5. 删除数据元素

bool ListDelete(SqList *&L, ElemType &e,int i)
{
int j;
if(i<1||i>L->length)
return false;
i--;     //将顺序表的逻辑序号转化为物理序号
e=L->length[i]; //将要删除的元素保存到变量e中
for(j=i;j<l->length;j++) //将data[i]之后的元素向前移一步
{
L->data[j]=L->data[j+1];
}
L->length--; //将顺序表的长度减一
return true;
}

6. 按元素值查找

int LocationElem(SqList *L,ElemType e)
{
int i=0;
while(i<L->length&&L->data[i]!=e)
i++;
if(i>=L->length)
return 0;   //未找到元素时返回 0
else
return i+1; //找到时返回的是逻辑序号
/*
注意:此时的 i 为顺序表中物理序号 及数组的下标
*/
}

7. 求顺序表的长度

int ListLength(SqList *L)
{
return(L->length);
}

8. 求线性表某个元素的值

bool GetElem(SqList *L,int i,ElemType &e)
{
if(i<1||i>L->length)
return false;
e=L->length[i-1]; //注意此时i的值为逻辑序号 (i-1)转为物理序号
return true;
}

9.输出线性表

void DispList(SqList *&L )
{
for(i=0;i<L->length;i++)
{
cout<<L->data[i]<<endl;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: