数据机构-2(顺序表)

线性表

概念

顺序表

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

表头(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;
}

内存泄漏检测

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

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

相关文章

mysql四种事务隔离级别,2024金三银四

TransactionDefinition.PROPAGATION_MANDATORY&#xff1a;如果当前存在事务&#xff0c;则加入该事务&#xff1b;如果当前没有事务&#xff0c;则抛出异常。 TransactionDefinition.PROPAGATION_NESTED&#xff1a;如果当前存在事务&#xff0c;则创建一个事务作为当前事务的…

快来围观!我自制的 AI 周报小能手:自动收集整理周报,一键发送邮件

前言 上篇文章分享了《跟着我的步骤&#xff0c;轻松打造出 AI 智能体》&#xff0c;很多朋友都比较感兴趣&#xff0c;咨询我问 “AI 小白能学吗&#xff1f;” 我感觉问题不大&#xff0c;完全可以&#xff0c;只要把要做的事情屡明白了&#xff0c;遇到的卡点问题直接问 GPT…

oracle 19c单机版本补丁升级

文章目录 一、补丁包概述二、备份opatch三、替换高版本opatch四、打DB补丁1、关闭数据库2、关闭监听3、解压补丁4、冲突检测5、补丁空间检查6、执行补丁升级7、将更新内容加载到数据库8、最后查看数据库版本9、卸载补丁包 一、补丁包概述 补丁升级包 链接&#xff1a;https://…

GStreamer简单看看

主要是现在弄摄像头&#xff0c;要用到这东西。所以学学。 最权威主页&#xff1a;GStreamer: open source multimedia framework 大概看了下&#xff0c;好像命令也不难。 gst-launch-1.0 v4l2src device/dev/video0 ! video/x-raw,formatYUY2,width640,height480,framerat…

Java-SSM电影购票系统

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

【漏洞复现】Arris 路由器 basic_sett 信息泄露漏洞

免责声明&#xff1a;文章来源互联网收集整理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该…

小车侧方位停车过程的动态模拟matlab仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 小车侧方位停车过程的动态模拟matlab仿真。仿真得到小车的停车动画&#xff0c;小车移动的xy轴坐标以及角度变换。 2.系统仿真结果 3.核心程序与模型 版本&#xff1a;MATLA…

Linux系统资源管理

Linux系统资源命令 在Linux中查看系统资源常用命令有哪些 在Linux中&#xff0c;系统资源是指计算机硬件、软件和网络设备等可以利用的一切物质和能量。Linux中的系统资源包括&#xff1a; CPU&#xff08;中央处理器&#xff09;&#xff1a;用于处理计算机中的指令和数据的…

opencv各个模块介绍(2)

Features2D 模块&#xff1a;特征检测和描述子计算模块&#xff0c;包括SIFT、SURF等算法。 Features2D 模块提供了许多用于特征检测和描述子匹配的函数和类&#xff0c;这些函数和类可用于图像特征的提取、匹配和跟踪。 FeatureDetector&#xff1a;特征检测器的基类&#xf…

AI应用开发-基于python的知识图谱技术

AI应用开发相关目录 本专栏包括AI应用开发相关内容分享&#xff0c;包括不限于AI算法部署实施细节、AI应用后端分析服务相关概念及开发技巧、AI应用后端应用服务相关概念及开发技巧、AI应用前端实现路径及开发技巧 适用于具备一定算法及Python使用基础的人群 AI应用开发流程概…

19 反向迭代器

反向迭代器和正向迭代器相反&#xff0c;比如一个数组内容是1,2,3,4,5。正向迭代器就是按顺序输出&#xff0c;反向迭代器是5,4,3,2,1&#xff0c;顺序倒着。想要第一个输出5&#xff0c;需要反向迭代器rbegin在5的位置,判断输出完的条件,rend在头节点的位置就行&#xff0c;只…

【go从入门到精通】select条件控制

作者简介&#xff1a; 高科&#xff0c;先后在 IBM PlatformComputing从事网格计算&#xff0c;淘米网&#xff0c;网易从事游戏服务器开发&#xff0c;拥有丰富的C&#xff0c;go等语言开发经验&#xff0c;mysql&#xff0c;mongo&#xff0c;redis等数据库&#xff0c;设计模…

【八股】ThreadLocal原理

1. Thread.java 我们首先打开Thread.java源码&#xff0c;看到里面有一个ThreadLocalMap类型的变量threadLocals 2. ThreadLocal.java -> getMap(thread t) 然后ThreadLocal.java里面有一个getMap函数&#xff0c;传入的是线程&#xff0c;返回的是线程里面的ThreadLoca…

mysql无法看到3306端口监听

参考:https://blog.csdn.net/shumeigang/article/details/103902459 mysql> show global variables like ‘port’; 是0 原因是我的my.cnf有话&#xff1a; skip-network 或 注释掉&#xff0c;然后重新启动下数据库&#xff0c;运行netstat -an|grep 3306 就可以看到了

学习笔记Day13:Linux进阶

Linux进阶 Vim——Linux自带的文本编辑器 功能强大 命令模式 使用 vim <file>进入后的默认模式可以上下左右移动光标 方向键/hjkl快速到所在行的开头^/末尾$向下移动30行30j&#xff08;上左右同&#xff09;上下翻页Ctrlf向上&#xff0c;Ctrlb向下翻页快速回到文件第…

docker 进入容器内部命令

docker容器运行了&#xff0c;怎么进入容器内部查看内部的文件情况呢&#xff1f; 答&#xff1a;可以通过docker exec 的命令查看。 docker exec --help 可以查看命令介绍 &#xff1a; docker exec -it XXX /bin/bash XX为容器ID 进入容器内部 /bin/bash是需要添加的 不…

MT管理器 使用手册

MT管理器 论坛&#xff1a;https://bbs.binmt.cc/ 使用技巧系列教程&#xff1a;https://www.52pojie.cn/thread-1259872-1-1.html MT管理器 使用手册 &#xff1a;https://mt2.cn/guide/&#xff1a;https://www.bookstack.cn/read/mt-manual/80b8084f6be128c0.md&#xff…

vue学习日记15:普通组件的注册使用

一、概念 &#xff08;1&#xff09;局部注册 &#xff08;2&#xff09;全局注册 二、实践 1.局部注册 &#xff08;1&#xff09;代码 步骤&#xff1a;创建组件 导入 注册 使用 src文件夹下面仅仅保留这两个即可 其他两个文件夹可以删除 在src下面建立components文件夹…

刷题DAY30 | LeetCode 332-重新安排行程 51-N皇后 37-解数独

332 重新安排行程&#xff08;hard&#xff09; 给你一份航线列表 tickets &#xff0c;其中 tickets[i] [fromi, toi] 表示飞机出发和降落的机场地点。请你对该行程进行重新规划排序。 所有这些机票都属于一个从 JFK&#xff08;肯尼迪国际机场&#xff09;出发的先生&…

Qt 不同数据类型转换

一.不同类型数据转换示例&#xff1a; #include <QGuiApplication> #include <QQmlApplicationEngine> #include <QJsonDocument> #include <QJsonObject> #include <QDebug>int main(int argc, char *argv[]) {QCoreApplication::setAttribute…