本文是笔者针对自身所学顺序表作出的C语言代码和知识总结,
如有错误还请浏览者指出,
笔者不胜感激。
本文的思路:
先介绍①顺序表的定义;再直接介绍②顺序表基本操作的代码实现;最后③根据代码实现一个实例。如下图所示
图 1 本 文 思 路 图1 本文思路 图1本文思路
1 顺序表的定义
线性表的顺序存储称顺序表。
其是用一组地址连续的存储单元依次存储线性表中的数据元素,从而使得逻辑上相邻的元素在物理存储位置上也相邻。
线性表的特点:
1.逻辑顺序和物理顺序相同(因此插入删除需要移动大量的元素
2.随机存取
3.存储密度高
2 顺序表的基本操作及代码实现
前提,声明顺序表结构体L
#define MAXSIZE 20 /* 存储空间初始分配量 */
typedef struct
{
int data[MAXSIZE]; /* 设为int数组,存储数据元素 */
int length; /* 线性表当前长度 */
}SqList;
2.1 初始化顺序表
作用:初始化表,构建一个空的线性表
代码:
bool InitList(SqList *L) // 初始化表 构造一个空的线性表
{
L->length=0;
return true;
}
2.2
int Length(SqList *L) // 返回表长
{
return L->length;
}
bool ListInsert(SqList *L,int i,int e) // 第i个位置 插入元素的值为e
{
int k;
if(i<1||i>L->length+1) return false; // 如果位置输入错误 则插入失败
if(L->length>=MAXSIZE) return false; // 如插入元素超过了表最大长度 则插入失败
for(k=L->length;k>i;k--) // 第i个位置及以后位置全部后移
{
L->data[k]=L->data[k-1];
}
L->data[i-1]=e; // 第i个位置为e
L->length++; // 线性表长度加1
return true;
}
bool ListDelete(SqList *L,int i, int e) // 删除第i个位置的元素 并赋值给e
{
int k;
if(i<1||i>L->length) return false; //如果i的位置不合法 则删除失败
e=L->data[i-1]; //将第i个位置的元素赋值给变量e
for(k=i;k<L->length;k++) // 将第i位置以及以后的元素前移
{
L->data[k-1]=L->data[k] ;
}
L->length--;
return true;
}
int LocateElem(SqList *L, int e)
{
int k;
for(k=0;k<L->length;k++)
{
if(L->data[k]==e)
return k+1;
}
return 0;
}
int GetElem(SqList *L, int i) //按位查找 获取表L中第i个位置元素的值
{
if(i<1||i>L->length||L->length==0) return false;
return L->data[i-1];
}