数据结构之顺序存储-顺序表的基本操作c/c++(创建、初始化、赋值、插入、删除、查询、替换、输出)

学习参考博文:http://t.csdnimg.cn/Qi8DD

学习总结,同时更正原博主在顺序表中插入元素的错误。

数据结构顺序表------基本代码实现(使用工具:VS2022):

cpp 复制代码
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#define Size 7


//建表语句
typedef struct
{
	int* elem; //定义数组,动态分配
	int length;//定义数组的长度
	int size;  //定义数组的分配空间
}Sqlist;


//初始化线性结构顺序表
Sqlist InitList(Sqlist& L)   //返回类型为结构体
{
	L.elem = (int *)malloc(Size * sizeof(int));
	if (!L.elem)
		printf("申请储存空间失败");
	L.length = 0;
	L.size = Size;  //初始化顺序表的空间和长度
	return L;
}

//顺序表赋值
Sqlist assignment(Sqlist& L)
{
	int i;
	for (i = 0; i < L.size-2; i++)//给顺序表分配五个字符空间
	{
		L.elem[i] = i + 1;
		L.length++;   //顺序表长度
	}
	return L;
}

//输出顺序表储存情况
Sqlist Export(Sqlist L)
{
	printf("顺序表储存的情况如下:");
	for (int i = 0; i < L.length; i++)
	{
		printf("%d  ", L.elem[i]);
	}
	printf("\n");
	return L;
}

//插入数据
void ListInsert(Sqlist& L,int i, int e)  //i是插入的位置,e是插入的元素 
{
	if (i<1 || i>L.length + 1) //判断插入的数据是否合法
		exit(0);
	if (L.length >= Size)      //判断表的存储空间是否已满
		exit(0);
	for (int j = L.length - 1; j >= i - 1; j--)
		L.elem[j + 1] = L.elem[j];      //将第n位至第i位元素依次向右移动一个位置
	L.elem[i - 1] = e;     //将新元素e放到第i个位置
	L.length++;            //表长增加1
}

//删除元素
bool ListDelete(Sqlist& L, int i,int &e)
{
	if (i<1 || i>L.length)
		return false;
	e = L.elem[i - 1];
	for (int j = i; j <= L.length - 1; j++)
		L.elem[j - 1] = L.elem[j];
	L.length--;
	return true;
}


//查找元素
int LocateElem(Sqlist L, int e)
{
	for (int i = 0; i < L.length; i++)
	{
		if (L.elem[i] == e)
			return i + 1;  //找到了,返回元素的位置
	}
	return 0; //没找到,返回0
}

//替换指定数据
Sqlist Replace(Sqlist L, int a, int b)//将a替换成b
{
	int i = LocateElem(L, a);
	L.elem[i - 1] = b;
	return L;
}

//主函数
int main()
{
	Sqlist L;
	L = InitList(L);
	L = assignment(L);
	Export(L);
	printf("\n --------------------------- \n");
	int i;
	int e;
	printf("请输入要插入的位置:");
	scanf_s("%d", &i);
	printf("请输入要插入的元素:");
	scanf_s("%d", &e);
	if (i > L.size + 1 || i < 0)
	{
		printf("输入的数据有误\n");
		exit(0);
	}
    ListInsert(L, i, e);
	Export(L);//输出顺序表
	printf("\n");
	printf("\n --------------------------- \n");
	printf("请输入删除的位置:");
	scanf_s("%d", &i);
	if (i > L.size || i < 0)
	{
		printf("输入的位置错误\n");
		exit(0);
	}
	int a;
	ListDelete(L, i,a);
	printf("删除的元素是:%d\n", a);
	Export(L);

	printf("\n --------------------------- \n");
	printf("查找5的位置:");//查找5的位置
	int b = LocateElem(L, 5);
	printf("5的位置是:%d",b);
	Export(L);

	printf("\n --------------------------- \n");
	printf("用 55 替换 5\n");
	Replace(L, 5, 55);
	Export(L);
}
相关推荐
zcmodeltech40 分钟前
火电厂模型能演示冷态启动和故障处理吗?——基于STM32与Modbus RTU的集控实训控制系统设计
数据结构·stm32·单片机·嵌入式硬件·能源
Doubbbbbbble云1 小时前
区间合并问题的常见算法模式与优化思路4
java·数据结构·算法
David猪大卫1 小时前
【C++修炼】哈希表的实现
数据结构·c++·笔记·学习·算法·哈希算法·散列表
广州山泉婚姻1 小时前
列表初始化:C++11全新初始化体系
c++·人工智能
莫生灬灬1 小时前
灵码 LingBuilder:用中文写代码,确定性生成真实 C++ 工程(开源)
c++·开源·mfc
浅念-1 小时前
C++ Protobuf 入门实战:基于通讯录项目吃透proto3语法与序列化
linux·服务器·网络·c++·protobuf·proto·proto3
零依赖极客2 小时前
Day 8·1 自注意力机制:Q·K^T/softmax/V的在线计算
c语言·arm开发·人工智能·llama
汉克老师3 小时前
CSP-J 初赛(以满分为目标):第三十九课《数学与逻辑②——阶乘、排列数与组合数:公式到底从哪里来?》
c++·csp-j·小学生·学c++编程
水饺编程3 小时前
第5章,[Win32 章节] :在平面直角坐标系中描点
c语言·c++·windows·visual studio
linx2953 小时前
单元九 · 零基础路线图-第 7–9 周·类与 RAII
c语言·开发语言·数据结构·c++·嵌入式硬件·算法