线性表的顺序存储结构
1.前言
最近整理一下数据结构与算法的笔记,本文为线性表的顺序存储结构。
参考书籍:大话数据结构。
学习方法:
- 多画图,便于自己理解
- 动手敲代码
代码:
https://gitee.com/YangJie100/data-structures-and-algorithms/tree/master
2.线性表的顺序存储结构体
线性表的顺序存储,即用一段地址连续的存储单元依次存储线性表的数据元素
因此,可以使用一维数组来实现线性表的顺序存储结构
#define MAXSIZE 20 //存储空间分配
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int ElemType;
typedef int Status; //函数返回状态值
//线性表的顺序存储结构体
typedef struct LinkList
{
ElemType data[MAXSIZE];
int length; //线性表当前长度
}LinkList, *PLinkList;
3.线性表的基本操作
3.1 初始化顺序线性表
Status InitList(PLinkList L)
{
L->length = 0;
return OK;
}
3.2 判断线性表是否为空
若L为空表,则返回TRUE,否则返回FALSE
Status IsListEmpty(LinkList L)
{
if (L.length == 0)
return TRUE;
else
return FALSE;
}
3.3 将L重置为空表
Status ClearList(PLinkList L)
{
L->length = 0;
return OK;
}
3.4 返回线性表中数据元素的个数
int ListLength(LinkList L)
{
return L.length;
}
3.5 打印线性表中的每个元素
依次对L的每个数据元素进行输出
Status ListPrint(LinkList L)
{
int i;
for (i = 0; i < L.length; i++)
{
printf("%d ", L.data[i]);
}
printf("\n");
return OK;
}
3.6 返回某个元素的位置
返回L中第1个与数据e满足相等关系的元素位置,若这样的数据元素不存在,则返回值为0
int LocateElem(LinkList L, ElemType e)
{
int i;
if (L.length == 0)
return 0;
for (i = 0; i < L.length; i++)
{
if (L.data[i] == e)
break;
}
if (i >= L.length)
return 0;
return i + 1;
}
3.7 获取某一位置的元素值
获得元素操作:用e返回L中第pos个数据元素的值
Status GetElem(LinkList L, int pos, ElemType* e)
{
if (L.length == 0 || pos<1 || pos>L.length)
{
return ERROR;
}
*e