数据结构 顺序表及其实现

1. 线性表的定义

线性表是n 个具有相同特性的数据元素的有序序列。

线性表在逻辑上可以想象成是连续的⼀条线段,线段上有很多个点,⽐如下图:

2. 线性表的顺序存储-顺序表

线性表的顺序存储就是顺序表。

如果下图中的⽅格代表内存中的存储单元,那么存储顺序表中这个元素就是放在连续的位置上:

3、创建及其实现方式

cpp 复制代码
const int N = 1e6 + 10; // 定义静态数组的最⼤⻓度 
int a[N], n; // 直接创建⼀个⼤数组来实现顺序表, n 表⽰当前有多少个元素

尾插

代码实现:

cpp 复制代码
//尾插 
void push_back(int x)
{
 a[++n] = x; // 下标为 0 的位置空出来 
 
 // 这样操作⼀般根据个⼈习惯,也可以从 0 开始计数 
 // 不过有些问题从 1 计数,处理起来可以不⽤考虑边界情况

头插

代码实现: 要把所有的元素全部右移⼀位,然后再放到头部位置

cpp 复制代码
// 头插 void push_front(int x)
{
 // 要把所有的元素全部右移⼀位,然后再放到头部位置 
 for(int i = n; i >= 1; i--) // 循环的顺序是否可以改变? 
 {
 a[i + 1] = a[i];
 }
 a[1] = x; // 把 x 放在⾸位 
 n++; // 不要忘记总个数 +1 
}

任意位置插⼊

代码实现:

cpp 复制代码
// 任意位置插⼊ - 在位置 p 处,插⼊⼀个 x 
void insert(int p, int x)
{
 for(int i = n; i >= p; i--) // 注意顺序不要颠倒 
 {
 a[i + 1] = a[i]; 
 }
 a[p] = x;
 n++; // 不要忘记总个数 +1 
}

尾删

代码实现:

cpp 复制代码
void pop_back()
{
 n--;
}

头删

代码实现:

cpp 复制代码
// 头删 
void pop_front()
{
 // 把所有元素向前移动⼀位 
 for(int i = 2; i <= n; i++) // 顺序是否能颠倒? 
 {
 a[i - 1] = a[i];
 }
 n--; // 总个数 -1 
}

任意位置删除

代码实现:

cpp 复制代码
// 任意位置删除 
void erase(int p)
{
 for(int i = p + 1; i <= n; i++)
 {
 a[i - 1] = a[i];
 }
 n--; // 总个数 -1 
}

按值查找

代码实现:

cpp 复制代码
// 查找这个数第⼀次出现的位置,找不到返回 0 
int find(int x)
{
 for(int i = 1; i <= n; i++)
 {
 if(a[i] == x) return i;
 }
 return 0;
}

按位查找

代码实现:

cpp 复制代码
// 返回 p 位置的数 
int at(int p)
{
 return a[p];
}

修改元素

代码实现:

cpp 复制代码
// 把 p 位置的数修改成 x 
void change(int p, int x)
{
 a[p] = x;
}

清空顺序表

代码实现:

cpp 复制代码
// 清空顺序表 
void clear()
{
 n = 0;
}
相关推荐
7hhhhhhh7 小时前
自学嵌入式第二十六天:数据结构-哈希表、内核链表
数据结构·链表·散列表
3壹10 小时前
单链表:数据结构中的高效指针艺术
c语言·开发语言·数据结构
耳总是一颗苹果12 小时前
排序---插入排序
数据结构·算法·排序算法
YLCHUP12 小时前
【联通分量】题解:P13823 「Diligent-OI R2 C」所谓伊人_连通分量_最短路_01bfs_图论_C++算法竞赛
c语言·数据结构·c++·算法·图论·广度优先·图搜索算法
晴空闲雲14 小时前
数据结构与算法-字符串、数组和广义表(String Array List)
数据结构·算法
Dovis(誓平步青云)15 小时前
《C++哈希表:高效数据存储与检索的核心技术》
数据结构·散列表·哈希表
秋难降16 小时前
聊聊 “摸鱼式” 遍历 —— 受控遍历的小心机
数据结构·算法·程序员
Code_Artist16 小时前
[Java并发编程]4.阻塞队列
java·数据结构·后端
嗑嗑嗑瓜子的猫16 小时前
大白话聊一聊,数据结构的基石:数组和链表
数据结构·链表·数组
小xin过拟合20 小时前
day20 二叉树part7
开发语言·数据结构·c++·笔记·算法