【线性表】顺序表示的功能函数(最全)

目录

一、什么是顺序表

二、定义顺序表的结构类型SqList

三、线性表的初始化

四、顺序表的功能函数

1、销毁线性表

2、清空线性表

3、求线性表的长度

4、判断线性表是否为空

5、顺序表的取值(输出第i个数据元素)

6、顺序表的查找

7、顺序表的插入

8、顺序表的删除


本文中的代码均以C语言呈现

一、什么是顺序表

线性表顺序表示就是用一组地址连续的存储单元依次存储线性表的数据元素。这种存储结构的线性表为顺序表

二、定义顺序表的结构类型SqList

typedef struct{
        /*所创建的链表每个数据元素的类型*/
}ElemType;



/*
举个栗子哦,线性表是学生的信息表格,每个学生的信息包括姓名、性别、C语言考试成绩。即线性表中数据元素为每个学生,数据项为姓名,性别,成绩。则可这样创建结构类型:

typedef struct{
        char name[20];
        char gender;
        double count;
}ElemType;

这样定义完成后在Sqlist结构中可直接引用
*/






typedef struct{
	 ElemType *elem;//存储空间的基地址

	int length;//当前的线性表长度

	int listsize;//此线性表最大长度,一般不太需要给出这一项
}Sqlist;



Sqlist L;//这样就定好了一个顺序表L;

笔者对线性表和C语言中的数组做一对比

①定义:      int arr[100];

                    Sqlist L;

②数组元素和线性表的数据元素

数组第i个元素:arr[i]

线性表第i个数据元素:L.elem[i]

③地址

数组第i个元素的地址为:&arr[i]

线性表第i个数据元素的地址为:&L.elem[i]也就是L.elem+i也是该数据元素结构体内部变量的首地址(例如:&(L.elem[i].count)

三、线性表的初始化

int InitList1(Sqlist *l){
    l->elem=(ElemType *) malloc(100*sizeof(ElemType ));//为顺序表分配空间
    if(!l->elem)return 0;
    l->length= 0;//空表长度为0
    l->listsize=100;顺序表最大长度
    return 1;
}
    
/*返回1则创建成功*/
在主函数中调用如下:


Sqlist L;
InitList(&L);

四、顺序表的功能函数

1、销毁线性表

void DestroyList(Sqlist *L){
    if(L->elem)  free(L->elem);//free函数释放内存
}

2、清空线性表

void ClearList(Sqlist *L){
    L->lenght=0;
}

3、求线性表的长度

int GetList(Sqlist *L){
    return (L->lenght);
}

4、判断线性表是否为空

int IsEmpty(Sqlist *L){
    if(L->lenght==0)return 1;
    else return 0; 
}

5、顺序表的取值(输出第i个数据元素)

int GetElem(Sqlist *L,int i,ElemType *e){
    if(i<1||i>(L->lenght))return 0;//位置i是否合理
    *e=L->elem[i-1];
    return 1;
}

6、顺序表的查找

int LocateElem(Sqlist *L,ElemType *e){
    int i;
    for(i=0;ilenght;i++){
           if(L->elem[i]==*e)return i+1;
    return 0;
}

7、顺序表的插入

int ListInsert_sq(Sqlist *L,int i,ElemType *e){
         int j;
        if(i<1||i>(L->lenght))return 0;
        if((L->lenght)==(L->listsize)return 0;
        for(j=L->lenght;j>i-1;j--)
                L->elem[j+1]=L->elem[j];
        L->elem[i-1]=*e;
        L->lenght++;
        return 1;
}

8、顺序表的删除

int ListDelete_Sq(Sqlist *L,int i){
        int j;
        if(i<1||i>(L->lenght))return 0;
        for(j=i;j<=L->lenght-1;j++)
                L->elem[j-1]=L->elem[j];
        L->lenght--;
        return 1;
}

你可能感兴趣的:(数据结构,数据结构,c语言,开发语言)