截图来自王道数据结构公开课
目录
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处放入新元素eL.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]; //将被删除的元素赋给efor(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);elseprintf("位序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];
}