【数据结构/C++】线性表_顺序表的基本操作

cpp 复制代码
#include <iostream>
using namespace std;
#define MaxSize 10
// 1. 顺序表
// 静态分配
// 创建匿名结构体
typedef struct
{
  int data[MaxSize];
  int length; // 当前长度
} SqList;
// 静态分配初始化顺序表
// 凡是需要改动原链表都需要引用或者指针传递
void InitList(SqList &L)
{
  for (int i = 0; i < MaxSize; i++)
  {
    L.data[i] = 0;
  }
  L.length = 0;
}
// 插入元素 到第 i 个位置
bool ListInsert(SqList &L, int i, int e)
{
  // 保证i的合法
  if (i < 1 || i > L.length + 1)
  {
    return false;
  }
  // 保证 length 的合法
  if (L.length >= MaxSize)
  {
    return false;
  }
  // 原本 i 位置及以后都向后移动一位
  for (int j = i; j <= L.length; j++)
  {
    L.data[j] = L.data[j - 1];
  }
  // 将 e 插入
  L.data[i - 1] = e;
  // 移动之后再将长度进行增加
  L.length++;
  return true;
}
// 删除第 i 个位置的元素
bool ListDelete(SqList &L, int i, int &e)
{
  // 保证 i 的合法
  if (i < 1 || i > L.length)
  {
    return false;
  }
  // 将被删除的元素赋值给 e,便于输出
  e = L.data[i - 1];
  // 将第 i 位置的元素(索引为 i - 1)及以后的元素向前移动一位
  // 首次移动的索引是 i,最后一次移动的索引是 L.length - 1
  for (int j = i; j < L.length; j++)
  {
    L.data[j - 1] = L.data[j];
  }
  L.length--;
  return true;
}
// 遍历顺序表
void ListTraverse(SqList L)
{
  for (int i = 0; i < L.length; i++)
  {
    cout << L.data[i] << " ";
  }
  cout << endl;
}
int main()
{
  int e;
  SqList L;
  InitList(L);
  ListInsert(L, 1, 1);
  ListInsert(L, 2, 2);
  ListInsert(L, 3, 3);
  ListDelete(L, 2, e);
  cout << "删除的元素是" << e << endl;
  ListTraverse(L);
  return 0;
}
相关推荐
Wzx19801214 小时前
python沙箱和docker沙箱你选对了吗?
开发语言·python·docker
牧羊人.33314 小时前
Python 办公自动化从入门到入土|09 数据容器之字典
开发语言·python
小僧景贤14 小时前
嵌入式C语言 第二篇:基础语法|嵌入式C与标准C的核心差异
c语言·开发语言·嵌入式c语言
阿pin14 小时前
Android随笔-AIDL
android·开发语言·aidl
Jasmine_llq14 小时前
《P15800 [GESP202603 六级] 选数》
数据结构·long long·逆序线性 dp·从后往前推导·转移严格遵循题意·防止总和溢出·复杂度on
fpcc14 小时前
ubuntu26环境下的开发环境安装处理
c++·并行编程
疯狂打码的少年14 小时前
【数据结构】串(字符串):基本概念与存储
数据结构·笔记
LiLiYuan.15 小时前
【字符串常量池】
java·开发语言·面试
瑞码空间15 小时前
Python爬虫进阶实战笔记
开发语言·python·计算机·python爬虫
16月6日-晴15 小时前
Java面向对象进阶—static
java·开发语言