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.hqwc.cn/news/529250.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【掌握版本控制:Git 入门与实践指南】配置详解|理解本地仓库结构

&#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;泥中に咲く—ウォルピスカーター 0:34━━━━━━️&#x1f49f;──────── 4:46 &#x1f504; ◀️ ⏸ ▶…

RocketMQ入门指南:从零开始学习分布式消息队列技术

RocketMQ 1. MQ介绍1.1 为什么要用MQ1.2 MQ的优点和缺点1.3 各种MQ产品的比较 2. RocketMQ快速入门2.1 准备工作2.1.1 下载RocketMQ2.2.2 环境要求 2.2 安装RocketMQ2.2.1 安装步骤2.2.2 目录介绍 2.3 启动RocketMQ2.4 测试RocketMQ2.4.1 发送消息2.4.2 接收消息 2.5 关闭Rocke…

【三十】springboot项目上高并发解决示例

互相交流入口地址 整体目录&#xff1a; 【一】springboot整合swagger 【二】springboot整合自定义swagger 【三】springboot整合token 【四】springboot整合mybatis-plus 【五】springboot整合mybatis-plus 【六】springboot整合redis 【七】springboot整合AOP实现日志操作 【…

信钰证券:股市牛市有什么特征?存在以下八大特征

股市牛市存在以下特征&#xff1a; 1、大盘在底部呈现接连的阳K线&#xff0c;一起大盘指数突破上方重要的关口&#xff0c;这说明大盘突破上方压力方位&#xff0c;把转换成支撑方位&#xff0c;行将开启上涨趋势&#xff0c;创建新高。 2、市场上的资金大量流入&#xff0c…

基于php的用户登录实现(v1版)(持续迭代)

目录 版本说明 数据库连接 登录页面&#xff1a;login.html 登录处理实现&#xff1a;login.php 用户欢迎页面&#xff1a;welcome.php 用户注册页面&#xff1a;register.html 注册执行&#xff1a;DoRegister.php 版本说明 v1实现功能&#xff1a; 数据库连接&#x…

图片如何压缩到200k以下?3个图片压缩技巧分享

图片如何压缩到200k以下&#xff1f;在日常生活中&#xff0c;将图片压缩至200K以下至关重要。这不仅能有效节省存储空间&#xff0c;让手机或电脑运行的更流畅&#xff0c;还能显著加快网络传输速度&#xff0c;提升分享和上传体验。同时&#xff0c;许多平台对上传图片的大小…

分类预测 | Matlab基于TTAO-CNN-LSTM-Attention三角拓扑聚合优化算法优化卷积神经网络-长短期记忆网络-注意力机制的数据分类预测

分类预测 | Matlab基于TTAO-CNN-LSTM-Attention三角拓扑聚合优化算法优化卷积神经网络-长短期记忆网络-注意力机制的数据分类预测 目录 分类预测 | Matlab基于TTAO-CNN-LSTM-Attention三角拓扑聚合优化算法优化卷积神经网络-长短期记忆网络-注意力机制的数据分类预测分类效果基…

CMake: 在构建世界掀起风暴

由简至繁&#xff0c;以小见大。首先&#xff0c;让我们从标准的 Gartner 技术成熟度曲线开始&#xff0c;了解 CMake 的发展&#xff0c;感受 CMake 对行业的深远影响。 图片来源&#xff1a;Gartner (我在原图基础上增加了年份) CMake 的开发从1999年开始&#xff0c;最初的…

PHP代码审计

前言 本文章主要是PHP代码审计的一些基础知识&#xff0c;包括函数的用法&#xff0c;漏洞点&#xff0c;偏向基础部分&#xff0c;个人能力有限&#xff0c;部分可能会出现错误或者遗漏&#xff0c;读者可自行补充。 代码执行 代码执行是代码审计当中较为严重的漏洞&#x…

Dgraph 入门教程三《linux本地部署》

上一章中&#xff0c;我们用的官方的Clound操作的&#xff0c;怎么在本地部署一套Dgraph呢。这一章将做详细介绍。安装有好几种方式&#xff0c;最简单的就是联网部署。因为项目需要&#xff0c;这里先不介绍和测试线上部署了&#xff0c;只介绍离线部署。 1、下载安装包 Rel…

JVM工作原理与实战(四十三):JVM常见面试题目

专栏导航 JVM工作原理与实战 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、JVM常见面试题目 1.什么是类加载器&#xff0c;有哪些常见的类加载器&#xff1f; 2.什么是双亲委派机制&#xff0c;以及如何打破双亲委派机制&#xff1f; 3.如何判断堆上的对…

大数据与云计算

目录 一、大数据时代二、云计算——大数据的计算三、云计算发展现状四、云计算实现机制五、云计算压倒性的成本优势 一、大数据时代 我们先来看看百度关于 “大数据”&#xff08;Big Data&#xff09;的搜索指数。 可以看出&#xff0c;“大数据” 这个词是从2012年才引起关注…