数据结构--顺序表的基本操作[王道]

截图来自王道数据结构公开课

目录

1.插入操作

代码

时间复杂度分析

2.删除操作

代码

时间复杂度分析

3.按值寻找(顺序查找)

代码

时间复杂度

4.按位寻找(按序号查找)

代码


快速回顾顺序表的定义以及特点:数据结构-顺序表的实现 [王道]-CSDN博客

本篇博客框架(画的有点潦草):


1.插入操作

基本思想:

ListInsert(&L, i, e):插入操作。在顺序表第个位置插入新元素e。

若输入的位置不合法则返回false;

否则 将第i个元素及其后面的所有元素依次往后移动一个位置;

表长增加1,插入成功。

代码

复制代码
#define MaxSize 10  //定义最大长度

//采用静态分配方法 
typedef struct{
	int data[MaxSize]; //用静态的"数组"存放数据元素
	int length;        //定义顺序表当前长度 
}SqList;               //顺序表的类型定义

//插入操作 
bool ListInsert(SqList &L ,int i,int e){
	if(i<1 || i>L.length+1) //判断i的范围是否有效
		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;           //在位置i处放入新元素e
	L.length++;                //表长加1 
	
	return true; 
		 
} 

注意:要区分顺序表的位序数组下标

时间复杂度分析


2.删除操作

基本思想:

ListDelete(&L , i , &e):删除操作。删除表中第个位置的元素,使用引用变量e返回。

若i的输入不合法,则返回false;

否则,将被删元素赋给引用变量e,并将第i+1个元素及其后的所有元素依次往前移动一个位置,返回true。

代码

复制代码
#include <cstdio>
#define MaxSize 10  //定义最大长度

//采用静态分配方法 
typedef struct{
	int data[MaxSize]; //用静态的"数组"存放数据元素
	int length;        //定义顺序表当前长度 
}SqList;               //顺序表的类型定义

//初始化一个顺序表,长度为0 
void InitList(SqList &L){
	L.length = 0 ;  
}

//删除操作
bool ListDelete(SqList &L, int i,int &e){
	if(i<1 || i>L.length) //判断i的范围是否有效 
		return false;
		
	e = L.data[i-1];      //将被删除的元素赋给e
	
	for(int j=i; j<L.length ; j++)  //将第i个位置后的元素前移 
		L.data[j-1] = L.data[j]; 
		
	L.length--;           //线性表长度减1 
	
	return true;
} 

int main(){
	SqList L;    //声明一个顺序表
	InitList(L); //初始化顺序表 
	
	int e = -1;  //用变量e把删除的元素引用回来
	
	if(ListDelete(L,3,e))
		printf("已删除第3个元素,删除元素值为=%d\n",e);
	else
		printf("位序i不合法,删除失败\n"); 
		
	return 0;
}

时间复杂度分析

插入、删除操作过程示意:


3.按值寻找(顺序查找)

基本思想:

在顺序表L中查找第一个元素值等于e的元素,并返回其位序。

代码

复制代码
//在顺序表L中查找第一个元素值等于e的元素,并返回其位序
int LocateElem(SqList L,ElemType e){
	for(int i=0; i<L.length; i++)
		if(L.data[i] == e)
			return i+1; //数组下标为i的元素值等于e,返回其位序i+1 
			
	return 0 ;          //此时退出循环,说明查找失败 
} 

时间复杂度

注意:

关于这一句 比较数据元素的值 ,补充一个C/C++知识点。

基本数据类型:int char double float可以直接用运算符"=="进行数值上的比较,但是结构类型struct的数据类型不可以。

结构体struct的比较需要依次对比各个分量来判断两个结构体是否相等。

正确比较方法:

复制代码
#include <iostream>
#include <cstdio>

using namespace std;

typedef struct{
	int num;
	int people;
}Customer;

void test(){
	Customer a;
	Customer b;
	
	a.num = 1;
	a.people = 1;
	
	b.num = 1;
	b.people = 1;
	
//应该将结构体中的每个变量分开 进行各自比较
	if(a.num == b.num && a.people == b.people){
		printf("相等");
	}else{
		printf("不相等");
	}
}

而不是:


4.按位寻找(按序号查找)

基本思想:

按位寻找非常简单,直接根据数组下标访问数组元素,其时间复杂度为O(1)---随机存取特性

代码

复制代码
#define MaxSize 10 //定义最大长度

//静态分配定义顺序表 
typedef struct{
	ElemType data[MaxSize];
	int length;
}SqList; 

//按位查找 直接按照数组下标返回元素值 与访问普通数组的方法一样
ElemType GetElem(SqList L,int i){
	return L.data[i-1];
}
相关推荐
雾岛听蓝1 分钟前
算法复杂度解析:时间与空间的衡量
c语言·数据结构·经验分享·笔记
惊讶的猫19 分钟前
字符串- 字符串转换整数 (atoi)
数据结构·算法
laocooon5238578861 小时前
C语言 有关指针,都要学哪些内容
c语言·数据结构·算法
liu****2 小时前
11.Linux进程信号(三)
linux·运维·服务器·数据结构·1024程序员节
AI科技星2 小时前
张祥前统一场论动量公式P=m(C-V)误解解答
开发语言·数据结构·人工智能·经验分享·python·线性代数·算法
MoRanzhi12035 小时前
Python 实现:从数学模型到完整控制台版《2048》游戏
数据结构·python·算法·游戏·数学建模·矩阵·2048
2401_841495645 小时前
【数据结构】基于BF算法的树种病毒检测
java·数据结构·c++·python·算法·字符串·模式匹配
一只鱼^_6 小时前
力扣第 474 场周赛
数据结构·算法·leetcode·贪心算法·逻辑回归·深度优先·启发式算法
叫我龙翔6 小时前
【数据结构】从零开始认识图论 --- 单源/多源最短路算法
数据结构·算法·图论
ysa0510307 小时前
虚拟位置映射(标签鸽
数据结构·c++·笔记·算法