深入浅出,408数据结构之顺序表操作详解

在考研之路上,数据结构一直是备受关注的重要科目之一。而在数据结构中,顺序表作为基础且常见的数据结构之一,其插入、删除和按值查找操作更是我们需要深入理解和掌握的重要内容。本篇文章将为大家详细介绍顺序表的这几项操作,结合个人笔记、代码块和图片讲解,帮助大家轻松理解和掌握这些关键操作。

1. 顺序表的插入操作

#include <stdio.h>
#define Maxsize 50
typedef int ElemType;//为了让顺序表存储其他数据类型,更快完成代码修改
typedef struct {
	ElemType data[Maxsize]; //顺序表中的内容(如数组)
	int length; //长度
}SqList; //结构体命名
//函数要改变顺序表中的值,就得传地址,所以SqList &L
bool ListInsert(SqList &L, int i, ElemType element) {
	if (i < 1 || i > L.length+1) {//位置有1 2 3..length 插入位置没有1之前和length+1之后
		return false;
	}
	if (L.length == Maxsize) {//长度不能大于存放数据的最大存储空间
		return false;
	}

	//元素:  1 2 3
	//位置i:  1 2 3  L.length=3
	//下标:   0 1 2
	int j = 0;
	for (j = L.length;j >= i;j--) {
		L.data[j] = L.data[j - 1]; //元素后移
	}
	L.data[i - 1] = element;//在i位置插入元素
	L.length++; //长度记得加1
	return true;
}
//因为不需要改变顺序表的值,所以不用&
void PrintList(SqList L) {
	int i = 0;
	for (i = 0;i < L.length; i++) {
		printf("%3d", L.data[i]);//每个元素占三个空格,打印格式好看
	}
	printf("\n");
}
int main() {
	SqList L;//定义
	L.data[0] = 1;
	L.data[1] = 2;
	L.data[2] = 3;//放置元素
	L.length = 3;//顺序表的长度
	bool ret=ListInsert(L, 2, 16);//(顺序表,插入位置,插入元素)
	if (ret) {
		printf("插入成功\n");
		PrintList(L);
	}else {
		printf("插入失败\n");
	}
	return 0;
}

如图:
在这里插入图片描述

1.2 顺序表的删除操作

#include <stdio.h>
#define Maxsize 50
typedef int Elemtype;
typedef struct {
	Elemtype data[Maxsize];
	int length;
}SqList;
//顺序表里的元素要改变,del容器里的值也要改变,所以都加上&
bool DeleteElement(SqList &L, int i, Elemtype &e) {
	if (i<1 || i>L.length) {
		return false;
	}
	e = L.data[i - 1];//首先保存一下要删除的元素
	//元素:  1 2 3
	//位置i:  1 2 3  L.length=3
	//下标:   0 1 2
	int j;
	for (j = i - 1;j <L.length ;j++) {//length=3,下标最大只有2
		L.data[j] = L.data[j + 1];//将要删除元素之后的元素前移
	}
	L.length--;
	return true;
}
void PrintList(SqList L) {
	int i = 0;
	for (i = 0;i < L.length; i++) {
		printf("%3d", L.data[i]);//每个元素占三个空格,打印格式好看
	}
	printf("\n");
}
int main() {
	SqList L;
	L.data[0] = 1;
	L.data[1] = 2;
	L.data[2] = 3;
	L.length = 3;
	bool ret;
	Elemtype del;//定义一个容器准备存放删除的元素
	ret=DeleteElement(L, 2, del);
	if (ret) {
		printf("删除成功\n");
		PrintList(L);
	}
	else {
		printf("删除失败\n");
	}
	return 0;
}

如图:
在这里插入图片描述

1.3 顺序表的按值查找操作

#include <stdio.h>
#define Maxsize 50
typedef int Elemtype;
typedef struct {
	Elemtype data[Maxsize];
	int length;
}SqList;
int LocateElement(SqList L, int e) {
	int i;
	for (i = 0;i < L.length;i++) {
		if (e == L.data[i]) {
			return i + 1;//i是元素数组下标,i+1是顺序表的位置
		}
	}
	return 0;
}
int main() {
	SqList L;
	L.data[0] = 1;
	L.data[1] = 2;
	L.data[2] = 3;
	L.length = 3;
	int pos;//存储查找元素的位置
	pos = LocateElement(L, 1);//查找元素是1
	if (pos) {
		printf("查找成功\n");
		printf("查找元素的位置是%d\n", pos);
	}
	else {
		printf("查找失败\n");
	}
	return 0;
}
通过这篇文章,我希望能够帮助大家更加深入地理解顺序表的关键操作,让大家在备战考研的道路上更加游刃有余。同时,也希望能够通过个人的笔记和图文讲解,让大家对数据结构中的顺序表操作有一个更加清晰和全面的认识。
如有错误可以指出纠正!
  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值