一、线性表的顺序存储

0.相关操作

  1. 创建(引用型指针):CreateList(L,a,n)用数组创建线性表
  2. 初始化(引用型指针):InitList(L)
  3. 销毁(1/1+)(引用型指针):DestroyList(L)
  4. 是否为空(1)(bool):ListEmpty(L)
  5. 获取长度(1)(int):ListLength(L)
  6. 输出:输出线性表DispList(L)
  7. 获取某个元素(int/bool):GetElem(L,i)/GetElem(L,i,e)
  8. 找到某元素位置(int):LocateElem(L,e)
  9. 插入元素(引用型指针)(bool):ListInsert(L,i,e)
  10. 删除元素(引用型指针)(bool):ListDelete(L,i,e)
void CreateList(SqList *&L, ElemType a[], int n);//用数组创建线性表
void InitList(SqList *&L);//初始化线性表InitList(L)
void DestroyList(SqList *&L);//销毁线性表DestroyList(L)
bool ListEmpty(SqList *L);//判定是否为空表ListEmpty(L)
int ListLength(SqList *L);//求线性表的长度ListLength(L)
void DispList(SqList *L);//输出线性表DispList(L)
int/bool GetElem(SqList *L,int i);//求某个数据元素值GetElem(L,i)/GetElem(L,i,e)
int LocateElem(SqList *L, ElemType e);//按元素值查找LocateElem(L,e)
bool ListInsert(SqList *&L,int i,ElemType e);//插入数据元素ListInsert(L,i,e)
bool ListDelete(SqList *&L,int i);//删除数据元素ListDelete(L,i,e)

1.顺序存储的定义

#include <stdio.h>
#include <malloc.h>
#define MaxSize 50
typedef int ElemType;
typedef struct
{
    ElemType data[MaxSize];//一个数组与它限定的容量
    int length;//一个变量储存实际长度
} SqList;

2.用数组创建顺序存储的线性表

void CreateList(SqList *&L, ElemType a[], int n){//形参使用引用型指针L,分配内存,获取L的地址;需要保存的数组a;当前a的实际长度n;
    L = (SqList * )malloc(sizeof(SqList));
    for( int i = 0; i < n; i++)
        L->data[i]=a[i];
    L->length = n;
}

3.初始化顺序存储的线性表

void InitList(SqList *&L){//形参使用引用型指针L,重新分配内存,改变L的地址;
    L=(SqList * )malloc(sizeof(SqList));
    L->length = 0;//实际长度赋0
}

4.判定线性表是否为空

bool ListEmpty(SqList *L){//形参使用结构体指针L,获取结构体地址;
    return(L->length == 0);//返回长度
}

5.销毁线性表

void DestroyList(SqList *&L){//形参使用引用型指针L,获取结构体地址;
    free(L);//free释放指针变量指向的空间
    /*L->length = 0;
    L = NULL;*/
}

6.返回线性表长度

int ListLength(SqList *L){//形参传入结构体指针L,获取结构体地址;
    return(L->length);//返回长度
}

7.输出线性表

void DispList(SqList *L){//形参传入结构体指针L,获取结构体地址;
    for(int i = 0; i < L->length; i++)//循环输出
        printf("%d ",L->data[i]);
    printf("\n");
}

8.获取线性表中某个元素

/*返回bool型*/
bool GetElem(SqList *L, int i, ElemType &e){//形参传入结构体指针L,获取结构体地址;第几个元素变量i;储存用元素e;
    if(i < 1 || i > L->length)//判断i是否合法
        return false;
    e = L->data[i-1];
    return true;
}

/*返回int型*/
int GetElem(SqList *L, int i){
    if(i < 1 || i > L->length)
         printf("Error:");
    return(L->data[i-1]);
} 

9.按元素值查找位置

int LocateElem(SqList *L, ElemType e){//形参传入结构体指针;储存用元素e;
    int i = 0;
    while(i < L->length && L->data[i]!=e )//遍历查找
        i++;
    if(i >= L->length)
        return 0;
    else
        return i+1;
}

10.在第i个位置插入数据元素

bool ListInsert(SqList *&L, int i, ElemType e){//形参传入引用型指针;第几个 位置 变量i;储存用元素e;
    int j;
    if(i < 1 || i > L->length + 1){//判断插入位置是否合法
        printf("Error:插入位置出错");
        return false;
    }
    if(L->Length == MaxSize){//判断空间是否足够
        printf("Error:空间已满!");
        return false;
    }
    i--;//位置序号转成下标
    for( j = L->length; j > i; j--)//倒着 均后挪1位
        L->data[j] = L->data[j-1];
    L->data[i] = e;//i位置赋值
    L->length++;//实际长度加一
    return true;
}

bool ListInsert(SqList *&L,int i, ElemtType e){
    int j;
    if( i < 1 || i > L->length + )
}

11.删除第 i 个数据元素

bool ListDelete(SqList *&L, int i){//形参传入引用型指针;第几个元素变量i;
    int j;
    if(i < 1 || i > L->length)//判断位序变量i是否合法
        return false;
    i--;//位序转成下标
    for(j = i; j < L->length; j--)//均前移1位
        L->data[j-1] = L->data[j];
    L->length--;//实际长度-1
    return true;
}

12.全部代码

#include <stdio.h>
#include <malloc.h>
#define MaxSize 50
typedef int ElemType;
typedef struct
{
    ElemType data[MaxSize];//一个数组与它限定的容量
    int length;//一个变量储存实际长度
} SqList;
void CreateList(SqList *&L, ElemType a[], int n);//用数组创建线性表
void InitList(SqList *&L);//初始化线性表InitList(L)
void DestroyList(SqList *&L);//销毁线性表DestroyList(L)
bool ListEmpty(SqList *L);//判定是否为空表ListEmpty(L)
int ListLength(SqList *L);//求线性表的长度ListLength(L)
void DispList(SqList *L);//输出线性表DispList(L)
int/bool GetElem(SqList *L,int i);//求某个数据元素值GetElem(L,i)/GetElem(L,i,e)
int LocateElem(SqList *L, ElemType e);//按元素值查找LocateElem(L,e)
bool ListInsert(SqList *&L,int i,ElemType e);//插入数据元素ListInsert(L,i,e)
bool ListDelete(SqList *&L,int i);//删除数据元素ListDelete(L,i,e)

void CreateList(SqList *&L, ElemType a[], int n){
    L = (SqList *)malloc(sizeof(SqList));
    for(int i = 0; i < n;  i++)
        L->data[i] = a[i];
    L->length = n;
}

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

void DestroyList(SqList *&L){
    L->length = 0;
    L = NULL;
    free(L);
}
02-13 19:01