简介:这是顺序表的数据结构以C/C++语言实现,编译器为VS2022,如有不对的地方欢迎大家在评论区里讨论
在其中我们要用到如下头文件:
#include"stdio.h"
#include"stdlib.h"
简单宏定义一些类型,宏定义的内容可以根据自身需求进行更换:
#define Maxsize 50 //静态顺序表的最大长度
#define ElemType int //假定元素类型
#define InitSize 100 //表长度的初始定义
一、顺序表的定义和基本操作
1.1 线性表的定义
线性表是具有相同数据类型的n(n>=0)个数据元素的有限序列,其中n为表的长度。
1.2线性表的基本操作
是线性表的核心,一些复杂的操作可以通过调用基本操作来实现,基本操作如下:
- InitList:初始化顺序表,构造空的线性表
- Length(L):求表长,返回线性表L的长度,即L的元素个数。
- LocateElem(L,e):按值查找操作。给定e值,在表中查找。
- GetElem(L,i):按为查找操作。获取表L中第i个位置的元素值。
- ListInsert(&,i,e):插入操作。在表L中第i个位置插入一个为e的元素。
- ListDelete(&L,i,&e):删除操作。删除表L中第i个位置的元素,并用e返回删除元素的值。
- PrintList(L):输出操作。按前后顺序输出线性表L的所有元素值。
- Empty(L):判空操作。若L为空表,则返回true,否则返回false。
- DestroyList(&L):销毁操作。销毁线性表,释放内存空间。
二、顺序表的顺序表示
2.1 顺序表的存储特点
表中元素的逻辑顺序与其存储的物理顺序相同
2.2 顺序表的初始化
顺序表有两种存储分配方式,分别是静态分配存储和动态分配存储:
静态分配存储:一次性划分内存,一旦空间满了再加入数据就会溢出,代码实现如下:
typedef struct {
ElemType data[Maxsize];
int length;
}SqList;
void InitList(SqList* L) {
L->length = 0;
}
动态分配存储,当存储空间占满,在程序执行中通过动态存储分配语句开辟并分配空间,代码实现如下:
typedef struct {
ElemType* data;
int MaxSize, length;
}SeqList;
void InitList(SeqList* L) {
L->data = (ElemType*)malloc(InitSize * sizeof(ElemType)); //申请开辟的存储控件
L->length = 0; //长度初始化
L->MaxSize = InitSize; //最大长度初始化
}
2.3 顺序表的基本操作实现
//顺序表插入操作,在表L的第i(1<=i<=L.Length+1)个位置插入新元素e
bool ListInsert(SqList& L, int i, ElemType e) {
if (i<1 || i>L.length + 1) //判输入的数据是否合法
return false;
if (L.length >= Maxsize) { //若长度超出最大长度,即不合法
return false;
}
for (int j = L.length; j >= i; j--) { //将第i个元素后面的元素都后移
L.data[j] = L.data[j - 1];
}
L.data[i - 1] = e; //插入值
L.length++; //长度加1
return true;
}
//顺序表删除操作
bool ListDelete(SqList& L, int i, ElemType& e) {
if (i<1 || i>L.length) return false; //判断i的范围是否有效
e = L.data[i - 1];
for (int j = 1; j < L.length; j++) {
L.data[j - 1] = L.data[j];
}
L.length--;
return true;
}
//按值查找(顺序查找)
int LocateElem(SqList L, ElemType e) {
int i;
for (i = 0; i < L.length; i++) {
if (L.data[i] == e) {
return i + 1; //下标为i的元素值等于e,返回其位序i+1
}
}
return 0; //退出循环,说明查找失败
}
//打印表L,打印成功返回true,打印失败返回false
bool PrintList(SqList &L) {
if (L.length == 0) {
return false;
}
if (L.length >= Maxsize) {
return false;
}
for (int i = 0; i <= L.length - 1; i++) {
printf("%d ", L.data[i]);
}
return true;
}
//销毁线性表
bool DestroyList(SqList* L) {
free(L);
return true;
}
标签:顺序,return,线性表,--,int,length,数据结构,data
From: https://blog.csdn.net/2302_80045541/article/details/142977496