顾名思义:顺序表就是一张连续的地址用来存储数据
顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址
连续的存储单元依次存储线性表中的各个元素、使得线性表中在逻辑结构上相邻的数据元
素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之
间逻辑上的相邻关系,采用顺序存储结构的线性表通常称为顺序表。
凡事都会有两面性,数据结构算法也不例外
1. 查找速度快,因为内存空间是连续的,所以找某个结点只需要通过计算即可直接找到
2. 尾插、尾删效率较高,因为有定义数组有效长度
1. 删除效率低,当删除某一个元素时,这个元素后的所有元素都需要前移一位,需要大量的循环操作
2. 当线性表长度变化较大时,难以确定存储空间的容量
#include <stdio.h>
#include <stdlib.h>
//常量值
#define MaxSize 50
typedef int EleType;
//结构体
typedef struct {
EleType data[MaxSize];//定义的数组,用来存元素
int len;//当前顺序表中有多个个元素
}List;
//插入元素
bool Insert(List& list, int pos, EleType ele) {
//防止插入位置不合理,禁止插入元素
if (pos <= 0 || pos > list.len + 1) {
return false;
}
//若线性表的当前存储长度>=线性表的总长度 不当存储
if (list.len >= MaxSize) {
return false;
}
//数据偏移
for (int i = list.len; i >=pos; i--){
list.data[i] = list.data[i - 1];
}
list.data[pos - 1] = ele;
list.len++;
return true;
}
//删除元素
bool Delete(List& list,int pos,EleType& ele) {
//删除位置不合法
if (pos<1 || pos>list.len) {
return false;
}
//顺序表没有元素
if (list.len==0) {
return false;
}
//保存要删除位置的元素
ele = list.data[pos - 1];
//把删除位置后面的元素前移
for (int i = pos; i <list.len;i++){
list.data[i-1]=list.data[i];
}
list.len--;
return true;
}
//修改元素
void Update(List& list,int pos,int number){
list.data[pos-1] = number;
}
//查找元素
int Search(List list,int number) {
for (int i = 0; i < list.len; i++){
//匹配成功:返回查询元素的位置
if (list.data[i]==number) {
return i + 1;
}
}
//匹配失败:返回-1
return -1;
}
//打印线性表
void print(List& list) {
for (int i = 0; i < list.len; i++){
printf("%3d", list.data[i]);//将每一个元素打印出来
}
printf("\n");
}
所有的算法实现总归就是增删改查
#include <stdio.h>
#include <stdlib.h>
//常量值
#define MaxSize 50
typedef int EleType;
//结构体
typedef struct {
EleType data[MaxSize];//定义的数组,用来存元素
int len;//当前顺序表中有多个个元素
}List;
//插入元素
bool Insert(List& list, int pos, EleType ele) {
//防止插入位置不合理,禁止插入元素
if (pos <= 0 || pos > list.len + 1) {
return false;
}
//若线性表的当前存储长度>=线性表的总长度 不当存储
if (list.len >= MaxSize) {
return false;
}
//数据偏移
for (int i = list.len; i >=pos; i--){
list.data[i] = list.data[i - 1];
}
list.data[pos - 1] = ele;
list.len++;
return true;
}
//删除元素
bool Delete(List& list,int pos,EleType& ele) {
//删除位置不合法
if (pos<1 || pos>list.len) {
return false;
}
//顺序表没有元素
if (list.len==0) {
return false;
}
//保存要删除位置的元素
ele = list.data[pos - 1];
//把删除位置后面的元素前移
for (int i = pos; i <list.len;i++){
list.data[i-1]=list.data[i];
}
list.len--;
return true;
}
//修改元素
void Update(List& list,int pos,int number){
list.data[pos-1] = number;
}
//查找元素
int Search(List list,int number) {
for (int i = 0; i < list.len; i++){
//匹配成功:返回查询元素的位置
if (list.data[i]==number) {
return i + 1;
}
}
//匹配失败:返回-1
return -1;
}
//打印线性表
void print(List& list) {
for (int i = 0; i < list.len; i++){
printf("%3d", list.data[i]);
}
printf("\n");
}
int main1() {
List L;//定义要操作的顺序表
bool falg;//查看返回值
EleType ele;//用来存要删除的元素
int pos;//查找元素返回元素的位置
L.data[0] = 1;
L.data[1] = 2;
L.data[2] = 3;
L.data[3] = 4;
L.len = 4;
//插入测试
falg=Insert(L, 3, 10);
print(L);
if (falg) {
printf("插入成功\n");
}
//删除测试
Delete(L, 1, ele);
printf("删除的元素是%d\n", ele);
printf("删除后的线性表排序为");
print(L);
//查找测试
pos=Search(L,100);
printf("查找元素的位置为===>%d\n", pos);
//修改测试
Update(L, 3, 66);
print(L);
return 0;
}
后面会慢慢更新其他算法内容,纯手写,欢迎大家留言。
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/m0_50677223/article/details/123491506
内容来源于网络,如有侵权,请联系作者删除!