01 数据结构引入 和 顺序表

阅读引言: 从本文开始给大家带来我在复习过程中写的数据结构的代码, 分享给需要的同学

一、数据结构引入

1.数据结构解决什么问题

数据结构可以将杂乱无章的数据管理起来, 提高数据的访问效率

计算机处理的对象(数据)已不再单纯是数值

其中系、办公室、……教师、学生可视为数据元素。元素之间呈现的是一种层次关系

设田径比赛项目有:A(跳高)、 B(跳远)、C(标枪)、D(铅球)、E(100m跑)、F(200m跑)。参赛选手的项目表,如下表所列:

2.数据结构的逻辑关系

二、顺序表的代码实现

/* squence_list.h */
#ifndef _SQUENCE_LIST_H
#define _SQUENCE_LIST_H

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>

#define N 128
typedef int data_t;           /* 在编译的时候处理 */
typedef struct {
	data_t arr[N];             /* 顺序表的存储空间 */
	int last;                  /* 数组的最后一个元素的下标, last为-1代表数组中没有元素 */
}sq_list, *sq_link;

sq_link sqlist_create(void);                                    /* 创建顺序表 */
int sq_list_clear(sq_link p);                                   
int is_empty(sq_link p);
int get_length(sq_link p);
int sqlist_insert(sq_link p, data_t value, int pos);
void sqlist_show(sq_link p);
void sqlist_delete(sq_link p);
int sqlist_delete_pos(sq_link p, int pos);
int sqlist_locate(sq_link p, data_t value);
int two_sqlist_merge(sq_link p1, sq_link p2);
int delete_repeate_element(sq_link p);

#endif

/* squence_list.c */
#include "squence_list.h"


sq_link sqlist_create(void)
{
	sq_link p = (sq_link)malloc(sizeof(sq_list));
	if(p == NULL) {
		printf("%s malloc is failed!\n", __func__);
		return NULL;
	}

	memset(p, 0, sizeof(sq_list));
	p->last = -1;

	return p;
}

int sq_list_clear(sq_link p)
{
	if(p == NULL) {
		printf("param of %s is NULL!\n", __func__);
		return -1;
	}

	memset(p, 0, sizeof(sq_list));
	p->last = -1;

	return 0;
}

int is_empty(sq_link p) 
{
	if(p == NULL) {
		printf("param of %s is NULL!\n", __func__);
		return -1;
	}
	if(p->last == -1) {
		return 1;
	}
	return 0;
}

int get_length(sq_link p)
{
	if(p == NULL) {
		printf("param of %s is NULL!\n", __func__);
		return -1;
	}

	return (p->last + 1);
	
}

/* 顺序表的缺点: 涉及到插入数据和删除数据的时候会有大量的数据移动 */
int sqlist_insert(sq_link p, data_t value, int pos) 
{
	int i;
	if(p == NULL) {
		printf("param of %s is NULL!\n", __func__);
		return -1;
	}
	if(p->last >= N) {
		printf("squence list is full!\n");
		return -1;
	}

	/* 存储位置必须连接着 */
	if(pos < 0 || pos > p->last + 1) {
		printf("index of arrary is invalid!\n");
		return -2;
	}

	/* 将位于pos位置后的数据移动 */
	for(i = p->last; i >= pos; i--) {
		p->arr[i + 1] = p->arr[i];
	}
	p->arr[pos] = value;
	p->last++;

	return 0;
	
}

void sqlist_show(sq_link p)
{
	int i;
	if(p == NULL) {
		printf("param of %s is NULL!\n", __func__);
		return ;
	}

	if(p->last == -1) {
		printf("squence list is empty!\n");
		return ;
	}
	
	for(i = 0; i <= p->last; i++) {
		printf("%d ", p->arr[i]);
	}
	puts("");
	
}


void sqlist_delete(sq_link p)
{
	if(p == NULL) {
		printf("param of %s is NULL!\n", __func__);
		return;
	}

	free(p);
	p = NULL;         /* 防止野指针页虚悬空指针 */
}


int sqlist_delete_pos(sq_link p, int pos) 
{
	int i;
	if(p == NULL) {
		printf("param of %s is NULL!\n", __func__);
		return -1;
	}

	if(pos < 0 || pos > p->last) {
		printf("index of delete is invalid!\n");
		return -1;
	}

	for(i = pos; i < p->last; i++) {
		p->arr[i] = p->arr[i + 1];
	}

	p->last--;

	return 0;
}

int sqlist_locate(sq_link p, data_t value)
{
	int i;
	if(p == NULL) {
		printf("param of %s is NULL!\n", __func__);
		return -1;
	}

	for(i = 0; i <= p->last; i++) {
		if(p->arr[i] == value) {
			return i;
		}
	}

	return -1;
}


/* 将p1和p2的并集插入到p1中 */
int two_sqlist_merge(sq_link p1, sq_link p2)
{

	int i = 0;
	if(p1 == NULL || p2 == NULL) {
		printf("param of %s is NULL!\n", __func__);
		return -1;
	}

	while(i < p2->last) {
		if(sqlist_locate(p1, p2->arr[i]) == -1) {
			sqlist_insert(p1, p2->arr[i], p1->last + 1);
		}
		i++;
	}

	return 0;
}


/* 删除顺序表中的重复元素 */
int delete_repeate_element(sq_link p)
{
	int i = 0, j = 0;
	if(p ==NULL) {
		printf("param of %s is NULL!\n", __func__);
		return -1;
	}

	if(p->last == 0) {
		return -1;
	}

	while(i < p->last) {
		j = i + 1;
		while(j <= p->last) {
			if(p->arr[i] == p->arr[j]) {
				sqlist_delete_pos(p, j);
			} 
			j++;
		}
		i++;
	}

	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/447707.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2022 年广西职业院校技能大赛高职组《云计算》赛项赛卷

#需要资源或有问题的&#xff0c;可私博主&#xff01;&#xff01;&#xff01; #需要资源或有问题的&#xff0c;可私博主&#xff01;&#xff01;&#xff01; #需要资源或有问题的&#xff0c;可私博主&#xff01;&#xff01;&#xff01; 某企业拟使用 OpenStack 搭建一…

YOLOv8独家改进:backbone改进 | 最新大卷积核CNN架构UniRepLKNet,ImageNet 88% | CVPR2024

💡💡💡本文独家改进:大核卷积一统多种模态!RepLK正统续作UniRepLKNet,代替YOLOv8 Backbone 改进结构图如下: 收录 YOLOv8原创自研 https://blog.csdn.net/m0_63774211/category_12511737.html?spm=1001.2014.3001.5482 💡💡💡全网独家首发创新(原创),适…

基于智慧灯杆的智慧城市解决方案(2)

功能规划 智慧照明功能 智慧路灯的基本功能仍然是道路照明, 因此对照明功能的智慧化提升是最基本的一项要求。 对道路照明管理进行智慧化提升, 实施智慧照明, 必然将成为智慧城市中道路照明发展的主要方向之一。 智慧照明是集计算机网络技术、 通信技术、 控制技术、 数据…

WordPress高端后台美化WP Adminify Pro优化版

后台UI美化WP Adminify Pro修改自定义插件&#xff0c;适合建站公司和个人使用&#xff0c;非常高大上&#xff0c;下载地址&#xff1a;WP Adminify Pro优化版 修复记录&#xff1a; 1、修复已知BUG 2、修复手机版兼容问题 3、修复打开速度&#xff0c;原版打开速度太慢 4…

华为数通方向HCIP-DataCom H12-821题库(多选题:121-140)

第121题 以下哪些事件会导致IS-IS产生一个新的LSP? A、引入的IP路由发送变化 B、周期性更新 C、接口开销发生了变化 D、邻接Up或Down 【参考答案】ABCD 【答案解析】 第122题 以下哪些协议既支持网络配置管理又支持网络监控管理? A、Telemetry B、NETCONF C、SNMP D、LLDP …

STM32CubeIDE基础学习-STM32CubeIDE软件偏好设置

STM32CubeIDE基础学习-STM32CubeIDE软件偏好设置 文章目录 STM32CubeIDE基础学习-STM32CubeIDE软件偏好设置前言第1章 设置字体颜色第2章 设置字体大小第3章 设置代码区背景颜色总结 前言 编程软件环境最好就设置一个自己喜欢的界面进行显示&#xff0c;这样看起来会比较舒服些…

重生奇迹MU觉醒弓箭手技能有哪些

1、普攻&#xff1a;向前方射出箭矢&#xff0c;造成一定的物理输出。 2、冰封箭&#xff1a;弓箭手射出一发冰冻的箭矢&#xff0c;造成一定的范围伤害。 3、精灵祝福&#xff1a;可以召唤一只守护精灵&#xff0c;为自己加血治疗。 4、多重箭&#xff1a;弓手射出扇形范围…

c++基础知识之父类地址和基类地址一定相同?

背景 hi&#xff0c;粉丝朋友们&#xff1a; 大家好&#xff01;这两天在分析智能指针Refbase相关内容时候&#xff0c;debug打印相关记录一直有个颠覆我观念的问题一直让我无比纠结。 本质原因可能还是java代码的思维去理解c导致的。 情况如下&#xff1a; java代码 public …

基于PHP的餐厅管理系统APP设计与实现

目 录 摘 要 I Abstract II 引 言 1 1 相关技术 3 1.1 MVC 3 1.2 ThinkPHP 3 1.3 MySQL数据库 3 1.4 uni-app 4 1.5 本章小结 4 2 系统分析 5 2.1 功能需求 5 2.2 用例分析 7 2.3 非功能需求 8 2.4 本章小结 8 3 系统设计 9 3.1 系统总体设计 9 3.2 系统详细设计 10 3.3 本章小…

【初始MongoDB】MongoDB的使用(对比MySQL)

MongoDB简介 1、NoSQL简介 NoSQL(NoSQL Not Only SQL)&#xff0c;意即反SQL运动&#xff0c;指的是非关系型的数据库&#xff0c;是一项全新的数据库革命性运动&#xff0c;早期就有人提出&#xff0c;发展至2009年趋势越发高涨。NoSQL的拥护者们提倡运用非关系型的数据存储…

你是否遭遇过管理多种远程连接的混乱场面,介绍你一款方便统一的管理神器:1Remote

网管小贾 / sysadm.cc 约瑟夫是一个外国小伙儿&#xff0c;金发碧眼高鼻梁&#xff0c;年岁在35左右。 那天与他短暂的相处令我印象深刻。 那是某一年的夏天&#xff0c;我去南方某岛游玩&#xff0c;在一处僻静的口袋公园中偶遇了约瑟夫。 他当时正坐在长椅上&#xff0c;摆…

Redis精讲

redis持久化 RDB方式 Redis Database Backup file (redis数据备份文件), 也被叫做redis数据快照. 简单来说就是把内存中的所有数据记录到磁盘中. 快照文件称为RDB文件, 默认是保存在当前运行目录. [rootcentos-zyw ~]# docker exec -it redis redis-cli 127.0.0.1:6379> sav…

matlab阶段学习笔记小节2

syms定义符号变量 求极限 第二题 第三题 limit(y,n,inf);求的的函数y关于自变量n在无穷处&#xff08;inf&#xff09;的极限 exp(2)即指数为2&#xff0c;底为e,也就是e^2 求导数 第一题 log(x)默认是以e为底的指数函数&#xff0c;也就是ln(x). 使用diff(f)对函数进行求…

机器视觉学习(一)—— 认识OpenCV、安装OpenCV

目录 一、认识OpenCV 二、通过pip工具安装OpenCV 三、PyCharm安装OpenCV 一、认识OpenCV OpenCV&#xff08;Open Source Computer Vision Library&#xff0c;开源计算机视觉库&#xff09;是一个跨平台的计算机视觉库&#xff0c;最初由威尔斯理工学院的Gary Bradski于199…

什么是序列化?序列化的作用是什么?Java 中如何实现序列化和反序列化?

一、序列化简述 序列化是指将结构化的数据( 例如对象 )转化成一个字符串 / 字节数组。转化过程中&#xff0c;不会造成数据信息部分丢失。 反序列化则为反向操作&#xff0c;将已经进行过序列化之后的数据还原回原本的结构化数据。正是序列化中需要保证转化之后的数据信息不会…

游戏 AI 在体育竞技游戏中的应用实践,通过 PVE 对抗规则AI+自博弈的方式,训练出了高强度、多风格策略的足球 SPG 对战 AI | 附方案详情及资料

AI 在体育竞技游戏&#xff08;SPG&#xff0c;Sports Game&#xff09;中的应用已经成为游戏厂商持续探索的领域之一。随 着人工智能技术的不断发展&#xff0c;越来越多的游戏开发商开始使用 AI 来提升游戏的真实感和沉浸感。 例如&#xff0c;在足球模拟游戏中&#xff0c…

SpringMVC10、拦截器

10、拦截器 10.1、概述 SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理。开发者可以自己定义一些拦截器来实现特定的功能。 过滤器与拦截器的区别&#xff1a;拦截器是AOP思想的具体应用。 过滤器 servlet规范中的一部分&…

力扣每日一题 猜数字游戏 阅读理解

Problem: 299. 猜数字游戏 思路 &#x1f468;‍&#x1f3eb; 灵神 复杂度 Code class Solution {public String getHint(String secret, String guess) {int a 0;int[] cntS new int[10];int[] cntG new int[10];for(int i 0; i < secret.length(); i){if(secre…

小迪安全34WEB 攻防-通用漏洞文件上传黑白盒审计逻辑中间件外部引用

#知识点&#xff1a; 1、白盒审计三要素 2、黑盒审计四要素 3、白黑测试流程思路 #详细点&#xff1a; 1、检测层面&#xff1a;前端&#xff0c;后端等 2、检测内容&#xff1a;文件头&#xff0c;完整性&#xff0c;二次渲染等 3、检测后缀&#xff1a;黑名单&…

http升级https需要做什么

背景&#xff1a;随着现代网络时代的高速发展&#xff0c;网络安全方面的日益更新&#xff0c;实现网站https协议的数量也在不断增多&#xff0c;完善安全方面的因素也在逐步增加。 下面从最基础的网站http协议全面升级为https协议的流程做出说明。 目录 首先带大家一起先了解…