一、线性表的顺序存储
0.相关操作
- 创建(引用型指针):CreateList(L,a,n)用数组创建线性表
- 初始化(引用型指针):InitList(L)
- 销毁(1/1+)(引用型指针):DestroyList(L)
- 是否为空(1)(bool):ListEmpty(L)
- 获取长度(1)(int):ListLength(L)
- 输出:输出线性表DispList(L)
- 获取某个元素(int/bool):GetElem(L,i)/GetElem(L,i,e)
- 找到某元素位置(int):LocateElem(L,e)
- 插入元素(引用型指针)(bool):ListInsert(L,i,e)
- 删除元素(引用型指针)(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);
}