数据机构-2(顺序表)

news2024/11/13 11:11:46

线性表

概念

顺序表

示例:创建一个存储学生信息的顺序表

表头(Tlen总长度, Clen当前长度)

函数

#include <seqlist.c>

#include <stdio.h>
#include <stdlib.h>
#include "seqlist.h"
#include <string.h>
SeqList *CreateSeqList(int len)
{
    SeqList *s1 = (SeqList *)malloc(sizeof(SeqList));
    if(NULL == s1)
    {
        perror("Create SeqList malloc fail");
        return NULL;
    }

    s1->head = (DATATYPE *)malloc(sizeof(DATATYPE)*len);
    if(NULL == s1->head)
    {
        perror("create sqlist head malloc");
        return NULL;
    }

    s1->tlen = len;
    s1->clen = 0;

    return s1;
}

int IsFullSeqList(SeqList *list)
{
    return list->clen == list->tlen;
}

int InsertTailSeqList(SeqList *list, DATATYPE *data)
{
    if(IsFullSeqList(list))
    {
        return -1;
    }

    memcpy(&list->head[list->clen], data, sizeof(DATATYPE));
    ++list->clen;

    return 0;
}
int get_size_seqlist(SeqList *list)
{
    return list->clen;
}
int ShowSeqList(SeqList *list)
{
    int len = get_size_seqlist(list);
    int i = 0 ;
    for(i = 0; i < len; ++i)
    {
        printf("%s %c %d %d\n", list->head[i].name, list->head[i].sex, list->head[i].age, list->head[i].score);
    }
    return 0;
}

int InsertPosSeqList(SeqList *list, DATATYPE *data, int pos)
{
    if(IsFullSeqList(list) || pos > list->clen)
    {
        perror("insert fail");
        return -1;
    }
    
    int i = 0;
    for(i = list->clen; pos<i; --i)
    {
        list ->head[i] = list->head[i-1];
    }
    memcpy(&list->head[pos], data, sizeof(DATATYPE));
    list->clen++;
    return 0;
}

int FindSeqList(SeqList *list, char *name)
{
    int len = get_size_seqlist(list);\
    int i = 0;
    for(i = 0; i < len; ++i)
    {
        if(0 == strcmp(list->head[i].name, name))
        {
            return i;
        }
    }
    return -1;
}


DATATYPE* get_item_seqlist(SeqList *list, int pos)
{
    if(pos < 0 || pos >= list->clen)
    {
        return NULL;
    }
    return &list->head[pos];
}

int ModifySeqList(SeqList *list, char *name, DATATYPE *newdata)
{
    int ret = FindSeqList(list, name);
    if(-1 == ret)
    {
        return -1;
    }
    memcpy(&list->head[ret], newdata, sizeof(DATATYPE));
    return 0;
}
int ClearSeqList(SeqList *list)
{
    list->clen = 0;
    return 0;
}

int DestroySeqList(SeqList *list)
{
    free(list->head);
    free(list);
    return 0;
}

int DeleteSeqList(SeqList *list, char *name)
{
    int ret = FindSeqList(list, name);
    if(ret < 0)
    {
        printf("not find");
        return -1;
    }
    int i = ret;
    for(; i < list->clen; i++)
    {
        memcpy(&list->head[i+1], &list->head[i], sizeof(list->head[0]));
    }
    list->clen--;
}

#include “seqlist.h”

#ifndef _SEQLIST_H
#define _SEQLIST_H

typedef struct person{
    char name[32];
    char sex;
    int age;
    int score;
}DATATYPE;

typedef struct list{
    DATATYPE *head;
    int tlen;
    int clen;
}SeqList;

SeqList *CreateSeqList(int len);
int DestroySeqList(SeqList *list);//free
int ShowSeqList(SeqList *list);//show
int InsertTailSeqList(SeqList *list, DATATYPE *data);//写
int IsFullSeqList(SeqList *list);//clen ?= tlen
int IsEmptySeqList(SeqList *list);
int InsertPosSeqList(SeqList *list, DATATYPE *data, int pos);//插入
int FindSeqList(SeqList *list, char *name);//find
int ModifySeqList(SeqList *list, char *old, DATATYPE *new);//修改
int DeleteSeqList(SeqList *list, char *name);//删除某
int ClearSeqList(SeqList *list);//clear all
int get_size_seqlist(SeqList *list);//clen = ?
DATATYPE *get_item_seqlist(SeqList *list, int pos);//get head[?]



#endif

主函数


#include <stdio.h>
#include "seqlist.h"

int main()
{
    DATATYPE data[] = {
        {"jack", 'm', 20, 90},
        {"tom", 'm', 21, 78},
        {"tony", 'f', 19, 42},
        {"sora", 'f', 23, 74},
        {"amy", 'f', 21, 69}
    };
    SeqList *s1 = CreateSeqList(10);

    InsertTailSeqList(s1, &data[0]);
    InsertTailSeqList(s1, &data[1]);
    InsertTailSeqList(s1, &data[2]);
    
    ShowSeqList(s1);
    printf("----------------------------------------\n");

    InsertPosSeqList(s1, &data[4], 2);
    ShowSeqList(s1);
    printf("----------------------------------------\n");
    
    int ret = FindSeqList(s1, "tony");
    if(-1 == ret)
    {
        printf("not find\n");
    }
    else
    {
        DATATYPE *tmp = get_item_seqlist(s1, ret);
        printf("%s  %d\n", tmp->name, tmp->score);
    }
    printf("----------------------------------------\n");
    
    ModifySeqList(s1, "lisi", &data[4]);
    ShowSeqList(s1);
    printf("----------------------------------------\n");
    
    DeleteSeqList(s1, "tony");
    ShowSeqList(s1);
    
    ClearSeqList(s1);
    DestroySeqList(s1);
    return 0;
}

内存泄漏检测

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C#对于文件中的文件名判断问题

C#中对于文件名的判断问题&#xff0c;我们使用bool值进行值的传递&#xff0c;首先我们使用内置方法进行文件字符串匹配的bool值回传&#xff0c;我们打印出文件名以及相对应的bool&#xff0c;即可知道文件名是否真正生效 bool isHave fileName.Contains("Hello"…

【Python + Django】表结构创建

以员工管理系统为例。 事前呢&#xff0c;我们先把项目和app创建出来&#xff0c;详细步骤可以看我同栏目的第一篇、第二篇文章。 我知道你们是不会下来找的&#xff0c;就把链接贴在下面吧&#xff1a; 【Python Django】启动简单的文本页面-CSDN博客 【Python Django】…

excel所有知识点

1要加双引号 工作表&#xff08;.xlsx) 单击右键→插入&#xff0c;删除&#xff0c;移动、重命名、复制、设置标签颜色&#xff0c;选定全部工作表 工作表的移动&#xff1a;两个表打开→右键→移动&#xff08;如果右键是灰色的&#xff0c;可能是保护工作表了&#xff09…

读算法的陷阱:超级平台、算法垄断与场景欺骗笔记17_执法工具

1. 执法工具箱 1.1. 在数据驱动的经济环境中&#xff0c;明智监管潜力无限 1.2. 多年前的司法体系与反垄断执法机构更善于发现市场漏洞&#xff0c;并设计出了直接有效的方式来化解问题 1.2.1. 大型互联网平台的权势凌驾于法律之上 1.2.1.1. 英国上议院 1.3. 反垄断执法机…

SQLiteC/C++接口详细介绍sqlite3_stmt类(九)

返回&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;SQLiteC/C接口详细介绍sqlite3_stmt类&#xff08;六&#xff09; 下一篇&#xff1a; 无 33、sqlite3_column_table_name 函数 sqlite3_column_table_name 用于返回结果集中指定列所属的表的名称。如果查询中列使…

K8S Storage

概述 一般情况下&#xff0c;K8S中的Pod都不应该将数据持久化到Pod中&#xff0c;因为Pod可能被随时创建和删除&#xff08;扩容或缩容&#xff09;&#xff0c;即便是StatefulSet或Operator的Pod&#xff0c;也都不建议在Pod里存放数据&#xff0c;可以将数据持久化到Host上。…

本地丐版运行xAI grok-1的尝试(失败版)

前言 xAI开源了包含3000多亿参数的grok-1&#xff0c;想试试在本地跑。试了半天结果内存不够&#xff0c;结果以失败告终&#xff0c;结论是机器丐不了一点&#xff0c;想要跑起来内存必须要管够&#xff0c;显存应该也是需要的&#xff08;xAI好像用的8*A100 80G NvLink&…

多数据源mybatisplus对sqlserver分页查询兼容

新增配置文件 package com.ruoyi.framework.config;import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor…

两个免费的wordpress主模板

wordpress免费网站主题 蓝色高端大气上档次的wordpress免费网站主题&#xff0c;首页大图wordpress模板。 https://www.wpniu.com/themes/31.html WP免费模板 用粉色高端大气上档次的WP免费模板&#xff0c;建个网站也不错的。 https://www.wpniu.com/themes/16.html

从后端获取文件数据并导出

导出文件的公共方法 export const download (res, tools) > {const { message, hide } tools;const fileReader: any new FileReader();console.log(fileReader-res>>>, res);fileReader.onload (e) > {if (res?.data?.type application/json) {try {co…

WM8978 —— 带扬声器驱动程序的立体声编解码器(4)

接前一篇文章&#xff1a;WM8978 —— 带扬声器驱动程序的立体声编解码器&#xff08;3&#xff09; 九、寄存器概览与详解 1. 整体概览 WM8978芯片共有58个寄存器&#xff0c;整体总表如下&#xff1a; 2. 详细说明 在此&#xff0c;只介绍WM8978较为常用的那些寄存器。 &…

嵌入式典型总线及协议

在嵌入式系统中&#xff0c;各种总线和通信协议扮演着关键的角色&#xff0c;它们连接和协调系统中的各种硬件组件&#xff0c;实现数据传输和控制。本文将介绍一些典型的嵌入式总线及其通信协议&#xff0c;以及它们在嵌入式系统中的应用。 以下是我整理的关于嵌入式开发的一…

Java-SSM电影购票系统

Java-SSM电影购票系统 1.服务承诺&#xff1a; 包安装运行&#xff0c;如有需要欢迎联系&#xff08;VX:yuanchengruanjian&#xff09;。 2.项目所用框架: 前端:JSP、layui、bootstrap等。 后端:SSM,即Spring、SpringMvc、Mybatis等。 3.项目功能点: 3-1.后端功能: 1.用户管…

深入理解:蓝绿部署与金丝雀部署

深入理解&#xff1a;蓝绿部署与金丝雀部署 深入理解&#xff1a;蓝绿部署与金丝雀部署蓝绿部署&#xff08;Blue-Green Deployment&#xff09;原理优缺点适用场景 金丝雀部署&#xff08;Canary Deployment&#xff09;原理优缺点适用场景 总结 深入理解&#xff1a;蓝绿部署…

机器学习——决策树特征选择准则

机器学习——决策树特征选择准则 决策树是一种强大的机器学习模型&#xff0c;它可以用于分类和回归任务。决策树通过树状结构对数据进行分类&#xff0c;每个内部节点表示一个特征&#xff0c;每个叶节点表示一个类别或一个数值。在决策树构建的过程中&#xff0c;特征的选择…

Avalonia(11.0.2)+.NET6 打包运行到银河麒麟V10桌面系统

操作系统配置 项目结构 .net版本 这次我们是在银河麒麟V10系统上打包运行Avalonia(11.0.2)+.NET6.0的程序 开始打包 准备Linux下的桌面快捷方式以及图标 调整AvaloniaApplication2.Desktop.csproj的配置项,重点看下图红色线圈出来的部分,里面涉及到了LinuxPath的设置。完整的配…

【论文精读】OTA: Optimal Transport Assignment for Object Detection(物体探测的最优传输分配)

OTA最优传输 &#x1f680;&#x1f680;&#x1f680;摘要一、1️⃣ Introduction---介绍二、2️⃣Related Work---相关工作2.1 &#x1f393; Fixed Label Assignment--静态标签分配2.2 ✨Dynamic Label Assignment--动态标签分配 三、3️⃣Method---论文方法3.1 &#x1f39…

深度学习基础知识概述

深度学习理论 神经网络基础&#xff1a;感知机、前向传播、反向传播、激活函数 神经网络是深度学习的基础&#xff0c;它受到人脑结构的启发而设计。神经网络由许多相互连接的单元或节点组成&#xff0c;这些单元模拟生物神经元的功能。下面&#xff0c;我们将详细讲解神经网…

个人网站制作 Part 14 添加网站分析工具 | Web开发项目

文章目录 &#x1f469;‍&#x1f4bb; 基础Web开发练手项目系列&#xff1a;个人网站制作&#x1f680; 添加网站分析工具&#x1f528;使用Google Analytics&#x1f527;步骤 1: 注册Google Analytics账户&#x1f527;步骤 2: 获取跟踪代码 &#x1f528;使用Vue.js&#…

java.lang.String final

关于String不可变的问题&#xff1a;从毕业面试到现在&#xff0c;一个群里讨论的东西&#xff0c;反正码农面试啥都有&#xff0c;这也是我不咋喜欢面试代码&#xff0c;因为对于我而言&#xff0c;我并不喜欢这些面试。知道或不知道基本没啥含氧量&#xff0c;就是看看源代码…