#include<iostream>
using namespace std;
#define MAXSIZE 5
#define OK 1
#define TRUE 1
#define FALSE 0
#define ERROR 0
//状态信息
typedef int Status;
//存储返回信息
typedef int ElemType;
//线性表结构体定义
struct SqList{
int data[MAXSIZE];//data数组
int length;//线性表当前长度
};
//数据获取 i插入点 e获取值 返回状态标志 L线性表
Status GetElem(SqList L, int i, ElemType* e) {
//下标越界 报错
if (L.length == 0 || i<1 || i>L.length)
return ERROR;
//数组下标为实际标号减一
*e = L.data[i - 1];
//return 成功标志
return OK;
}
//插入操作 L线性表 i插入点 e插入值
Status ListInsert(SqList* L, int i, ElemType e) {
int k;
//如果当前数组已满 报错
if (L->length == MAXSIZE)
return ERROR;
//如果插入范围越界 实际序号为数组序号减一
if (i<1 || i>L->length + 1)
return ERROR;
//插入数据不在表尾 需要移动数据
if (i <= L->length)
//插入位置至表位都需后移一位 插入至当前位置之前
//包括插入点 所以k可以等于i-1
for (k = L->length - 1; k >= i - 1; k--)
L->data[k + 1] = L->data[k];
//此时后移完成 元素填入 数组下标为实际下标减一
L->data[i - 1] = e;
//插入之后线性表元素增加
++L->length;
//返回成功标志
return OK;
}
//删除操作
Status ListDelete(SqList* L, int i, ElemType* e) {
int k;
//表无元素可删
if (L->length == 0)
return ERROR;
//删除位置越界
if (i<1 || i>L->length)
return ERROR;
//存储删除元素的值
*e = L->data[i - 1];
//删除的不是最后元素 元素需要前移
if (i < L->length) {
//数组位置为实际位置减一 i-1
//删除位置往后 前移覆盖 i-1+1
for (k = i; k < L->length; ++k)
L->data[k - 1] = L->data[k];
}
//最后值覆盖并自减长度
L->data[--L->length] = NULL;
return OK;
}
int main(int argc, char** argv) {
system("pause");
return 0;
}
数据结构:线性表
最新推荐文章于 2023-04-19 14:32:47 发布