数据机构-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/466932.html

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

相关文章

LeetCode 面试经典150题 274.H指数

题目&#xff1a; 给你一个整数数组 citations &#xff0c;其中 citations[i] 表示研究者的第 i 篇论文被引用的次数。计算并返回该研究者的 h 指数。 根据维基百科上 h 指数的定义&#xff1a;h 代表“高引用次数” &#xff0c;一名科研人员的 h 指数 是指他&#xff08;她…

类和对象(2)

封装的概念 访问限定符 Java中主要通过类和访问权限来实现封装&#xff1a;类可以将数据以及封装数据的方法结合在一起&#xff0c;更符合人类对事物的认知&#xff0c;而访问权限用来控制方法或者字段能否直接在类外使用。Java中提供了四种访问限定符&#xff1a; 在 Java 中…

柔性纤维将织物带入信息时代

一种用半导体器件嵌入纤维的技术可以产生数百米长的无缺陷股线。用这些线编织的服装提供了对未来可穿戴电子产品的诱人一瞥。 想象一下&#xff0c;一顶可水洗的帽子可以帮助盲人感知交通信号灯的变化&#xff0c;或者一件衣服可以在佩戴者穿过博物馆时充当导游。这些技术可以…

Jingle Bio:产品出海的最重要一课是「重营销轻技术」?

名字: Jingle Bio 开发者 / 团队: Luo Baishun 平台: Web 请简要介绍下这款产品 Jingle Bio 是一款不需要任何编程基础就可以轻松驾驭的个人网站制作工具&#xff0c;你可以使用 Jingle Bio 来展示自己的作品、技能、经历、成就、爱好等&#xff0c;构建自己的个人品牌。 哪个瞬…

蓝桥杯第642题——跳蚱蜢

题目描述 如下图所示&#xff1a; 有 9 只盘子&#xff0c;排成 1 个圆圈。 其中 8 只盘子内装着 8 只蚱蜢&#xff0c;有一个是空盘。 我们把这些蚱蜢顺时针编号为 1 ~ 8。 每只蚱蜢都可以跳到相邻的空盘中&#xff0c; 也可以再用点力&#xff0c;越过一个相邻的蚱蜢跳到空盘…

手撕算法-二叉树的镜像

题目描述 操作给定的二叉树&#xff0c;将其变换为源二叉树的镜像。数据范围&#xff1a;二叉树的节点数 0≤_n_≤1000 &#xff0c; 二叉树每个节点的值 0≤_val_≤1000要求&#xff1a; 空间复杂度 O(n) 。本题也有原地操作&#xff0c;即空间复杂度 O(1) 的解法&#xff0c…

双线性插值

1.线性插值 即是提供一次线性已知点去拟合曲线再求得插值点。 2.原理 两次不同方向的插值&#xff0c;先对已知的四个点的值通过两次一次线性插值获取两个点&#xff0c;再通过刚刚获得的两个点的值再进行一次线性插值&#xff0c;从而根据已知的四个点的值获得一个未知的点…

Layui实现删除及修改后停留在当前页

1、功能概述&#xff1f; 我们在使用layui框架的table显示数据的时候&#xff0c;会经常的使用分页技术&#xff0c;这个我们期望能够期望修改数据能停留在当前页&#xff0c;或者删除数据的时候也能够停留在当前页&#xff0c;这样的用户体验会更好一些&#xff0c;但往往事与…

python 基础知识点(蓝桥杯python科目个人复习计划65)

今日复习内容&#xff1a;做题 例题1&#xff1a;遥远的雪国列车 问题描述&#xff1a; 小蓝和小红今天在房间里一起看完了“雪国列车”这部电影&#xff0c;看完之后他们感触颇深&#xff0c;同时他们想到了这样一道题目&#xff1a; 现在有一个数轴&#xff0c;长度为N&a…

thinkphp 微信商户付款到微信小程序用户零钱(v2密钥版)

这几天做项目有一个需求,小程序用户提交记录后,商家后台审核通过自动转账到用户的微信零钱中. 今天分享下如何实现自动打款: 一种是用v2密钥的接口:企业付款到零钱, 一种需要用v3密钥的接口:微信商户转账到零钱 php后端代码 v2企业付款到零钱 /*** 审核通过红包打款* @aut…

Java开发者的新宠:探索轻量级且功能强大的Magic-API

Java开发者的新宠&#xff1a;探索轻量级且功能强大的Magic-API 一、Magic-API简介二、Magic-API的核心特性三、结语 大家好&#xff0c;这里是程序猿代码之路&#xff0c;在当今的软件开发领域&#xff0c;快速迭代和高效交付是每个项目追求的目标。对于Java开发者来说&#x…

Cloudways搭建WordPress外贸独立站完整教程

现在做个网站不比从前了&#xff0c;搭建网站非常的简单&#xff0c;主要是由于开源的CMS建站系统的崛起&#xff0c;就算不懂编程写代码的人也能搭建一个自己的网站&#xff0c;这些CMS系统提供了丰富的主题模板和插件&#xff0c;使用户可以通过简单的拖放和配置操作来建立自…

二、SQL基础学习(函数、约束、事务)

目录 1、函数1.1、字符串函数1.2、数值函数1.3、日期函数1.4 、流程函数 2、约束2.1、外键约束2.2、删除/更新行为 3、事务3.1、事务的四大特性3.2、并发事务问题3.2、事务的隔离级别 1、函数 1.1、字符串函数 # concat select concat(Hello, MySql);# lower select lower(He…

Unity InputField实现框自适应内容简便方法

要实现InputField框自适应输入内容&#xff0c;除了通过代码进行处理&#xff0c;还可以是使用以下简便的方法。 1、创建InputField组件&#xff1a;右键->UI->Input Field -TextMeshPro。 2、把Input Field Settings中的Line Type设置为Multi Line Newline模式&#x…

探索NFT数字藏品交易平台:发现新的数字艺术世界

探索NFT数字藏品交易平台&#xff1a;发现新的数字艺术世界 随着数字化时代的来临&#xff0c;NFT&#xff08;非同质化代币&#xff09;技术正在改变艺术市场的格局&#xff0c;使得数字艺术品成为热门投资对象。而要进入这个令人兴奋的领域&#xff0c;您需要了解一些主要的…

区间和(图论)

小明与小红在玩一个猜谜游戏。小红有一个长度为N的下标从1开始的数组A。起初时&#xff0c;小明并不知道数组里的任何数。但是小红会告诉小明Q个关于数组A的信息&#xff0c;每个信息包括三个数字L、R、W表示&#xff1a;A[L] A[L 1] ... A[R] W 现在小红要小明用这Q组信…

hadoop分布式环境搭建

准备三台centos虚拟机 。&#xff08;master&#xff0c;slave1&#xff0c;slave2&#xff09; (hadoop、jdk文件链接&#xff1a;https://pan.baidu.com/s/1wal1CSF1oO2h4dkSbceODg 提取码&#xff1a;4zra) 前四步可参考hadoop伪分布式环境搭建详解-CSDN博客 1.修改主机名…

免登录积分商城系统 动力商城 兑换商城源码

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 免登录积分商城源码/动力商城/兑换商城系统 之前互站买来的&#xff0c;看着还是很不错的&#xff0c;不需要注册登录的商城&#xff0c;东西完整。UI也挺漂亮&#xff0c;这相当于是…

全球造爆款,海尔智家凭什么?

据说&#xff0c;广东人是地球上最像三体人的群体&#xff0c;因为需要时刻小心脱水和浸泡的时机。 这是因为广东人每年春天都会经历的现实噩梦“回南天”。墙壁淌水、地板湿滑、衣服干不了……浸泡在回南天里的广东人&#xff0c;喜提最新地狱笑话&#xff1a;“广东人有望最…