首页 > 其他分享 >数据结构--第一天

数据结构--第一天

时间:2024-07-25 17:56:45浏览次数:13  
标签:return seq 第一天 -- seqlist datatype printf 数据结构 data

--顺序表

        -顺序表的概念

          顺序表实际上就是数组,数组在进行封装后,可以进行增删改查操作,就成了顺序表

        -顺序表相关函数

           malloc函数

                框架:int*  p=(int*)malloc(sizeof(int));

                功能:开辟动态空间

          memset函数

                框架:memset(p,0,sizeof(p));

                功能:对开辟的空间进行初始化

        -顺序表代码实现

                sep_list.c
#include "seq_list.h"

//  创建空的顺序表
seqlist_t* create_empty_seqlist(){
        // 使用malloc创建空间
        seqlist_t* p =(seqlist_t*)malloc(sizeof(seqlist_t));
        if(p==NULL){
                printf("malloc allot failure:%s",strerror(errno));
                exit(EXIT_FAILURE);
        }
        memset(p,0,sizeof(seqlist_t));
        return p;
}

// 判断顺序表是否已满
bool seqlist_is_full(seqlist_t* p){
        if(p->n==MAX){
                return true;
        }
        return false;
}

bool seqlist_is_empty(seqlist_t* p){
        if(p->n==0){
                return true;
        }
        return false;
}

// 添加数据
bool seqlist_insert_data(seqlist_t* p,datatype_t* p_data){
        if(seqlist_is_full(p)){
                return false;
        }
        p->buffer[p->n]=*p_data;
        p->n++;
        return true;
}

// 显示数据
void seqlist_display(seqlist_t* p){
        for(int i=0;i<p->n;i++){
                datatype_t data = p->buffer[i];
                printf("%s\t%s\t%hhd\n",data.name,data.id,data.age);
        }
}


seq_list.h
#ifndef __HEAD_SEQ_LIST_H__
#define __HEAD_SEQ_LIST_H__

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

#define MAX 10

typedef struct{
        char name[128];
        char id[128];
        uint8_t age;
}datatype_t;

typedef struct{
        datatype_t buffer[MAX];
        uint8_t n;
}seqlist_t;

extern seqlist_t* create_empty_seqlist();
extern bool seqlist_is_full(seqlist_t* p);
extern bool seqlist_insert_data(seqlist_t* p,datatype_t* p_data);
extern bool seqlist_is_empty(seqlist_t* p);
extern void seqlist_display(seqlist_t* p);
#endif                                                                                                                                                                                                                                                                                                                                                                                                       
        main.c
#include "seq_list.h"

void menu();
void insert_data(seqlist_t* p_seq);
void display_data(seqlist_t* p);
int main(){
        seqlist_t* p_seq = NULL;
        do{
                menu();
                int select;
                printf("请选择");
                scanf("%d",&select);
                switch(select){
                        case 1:
                                // 初始化顺序表
                                p_seq = create_empty_seqlist();
                                printf("初始化成功!\n");
                                break;
                        case 2:
                                // 增加学生
                                if(p_seq==NULL){
                                        printf("请先进行初始化\n");
                                }else {
                                        insert_data(p_seq);
                                }
                                break;
                        case 3:
                                display_data(p_seq);
                                break;
                        case 0:
                                printf("welcome to next come.\n");
                                exit(EXIT_SUCCESS);
                        default:
                                printf("选择错误,请重新选择\n");
                }
        }while(1);
        return 0;
}

// 菜单
void menu(){
        printf("------------------顺序表----------------------\n");
        printf("1、初始化顺序表\n");
        printf("2、增加学生\n");
        printf("3、显示学生信息\n");
        printf("0、退出\n");
        printf("----------------------------------------------\n");
}

// 增加学生
void insert_data(seqlist_t* p_seq){
        datatype_t* data = (datatype_t*)malloc(sizeof(datatype_t));
        if(data==NULL){
                printf("添加学生失败\n");
                return;
        }
        memset(data,0,sizeof(datatype_t));
        printf("请输入学生姓名:");
        while(getchar()!='\n');
        fgets(data->name,sizeof(data->name)-1,stdin);
        data->name[strlen(data->name)-1]='\0';
        printf("请输入学号:");
        fgets(data->id,sizeof(data->id)-1,stdin);
        data->id[strlen(data->id)-1]='\0';
        printf("请输入年龄:");
        scanf("%hhd",&data->age);

        // 将学生加入到顺序表中
        bool result = seqlist_insert_data(p_seq,data);
        if(result==false){
                printf("空间已满,添加失败!\n");
        }else{
                printf("恭喜您,添加成功^_^\n");
        }
}



void display_data(seqlist_t* p){
        printf("姓名\t学号\t年龄\n");
        if(seqlist_is_empty(p)){
                printf("No Data\n");
        }else{
                seqlist_display(p);
        }
}

标签:return,seq,第一天,--,seqlist,datatype,printf,数据结构,data
From: https://blog.csdn.net/xujiashuo1/article/details/140695698

相关文章

  • ssl证书90天过期?保姆级教程——使用acme.sh实现证书的自动续期
    前言最近https到期了,想着手动更新一下https证书,结果发现证书现在的有效期只有90天,于是想找到一个自动更新证书的工具,发现了acme.sh,但是网上的文章质量参差不齐,可能需要多篇文章结合来操作,一步步试错。我这里结合了腾讯云的相关文档和一些其他的博文,保证一次性操作成功。下载acme.......
  • 51nod-3978列车
    https://class.51nod.com/Html/Textbook/Problem.html#problemId=3978&textbookChapterId=724https://class.51nod.com/Html/Textbook/ChapterIndex.html#textbookId=126&chapterId=337这里一次发车的转移是\([j+1,i]\),出发时间\(+s\)为\(j+1\)启程返回,偏移\(i-j-1\)就......
  • C#版OpenCV:OpenCVSharp 最详细最全面教程(万字详细总结)
    文章目录1.OpenCVSharp简介2.图像基本操作3.图像颜色空间转换4.图像几何变换5.图像阈值处理6.平滑图像7.图像梯度8.图像边缘检测9.图像直方图10.图像轮廓检测11.图像特征匹配12.视频读取与显示13.图像形态学操作14.图像混合与透明度处理15.霍夫变换16.傅......
  • HarmonyOS NEXT 学习笔记5--extend扩展组件
    1.代码:@Entry@ComponentstructPage_Button_Extend{@Statemessage:string='HelloWorld';build(){Column({space:10}){Button('微信支付').MyButton('wechat')Button('支付宝').My......
  • CDN小白保姆级入门指南——如何选择服务器
    想玩PCDN不知道从何下手?手里有大把资源却没有机器?这起告诉您如何选择服务器。选择服务器时,需要考虑以下几个关键因素:1.目标用户地理位置:了解目标用户的地理位置是选择服务器的首要考虑因素。选择靠近用户群体的地理位置可以降低延迟,提高内容传输速度。可以考虑使用全球分布的......
  • DeviceNet转Profinet协议网关
    怎么样才能把DeviceNet和Profinet网络连接起来呢?这几天有几个朋友问到了这个问题,作者在这里统一为大家详细说明一下。其实有一个设备可以很轻松地解决这个问题,名为JM-PN-DNTM,下面是详细介绍。一,产品主要功能‌1、捷米特JM-PN-DNTM型号网关是DeviceNet主站转Profinet从站工业......
  • 织梦dedecms模板文件在哪
    首页模板\templets\default\index.htm文章频道首页\templets\default\index_article.htm文章列表页\templets\default\list_article.htm文章内容页\templets\default\article_article.htm图集频道首页\templets\default\index_image.htm图集列表页\templets\defau......
  • Label Studio:从零到一
    吾名爱妃,性好静亦好动。好编程,常沉浸于代码之世界,思维纵横,力求逻辑之严密,算法之精妙。亦爱篮球,驰骋球场,尽享挥洒汗水之乐。且喜跑步,尤钟马拉松,长途奔袭,考验耐力与毅力,每有所进,心甚喜之。 吾以为,编程似布阵,算法如谋略,需精心筹谋,方可成就佳作。篮球乃团队之艺,协作共进,方显力......
  • Mac M1 安装ElasticSearch & kibana
    首先,下载安装包(需要注意的是:Kibana的版本需要和Elasticsearch的版本一致。这是官方支持的配置。)ElasticSearch:https://www.elastic.co/cn/downloads/elasticsearchkibana:https://www.elastic.co/cn/downloads/kibana 对于MacM1芯片基于ARM架构应该选择Aarch64(另一个X86_64......
  • 经典手机单机游戏:艾诺迪亚4,一款童年回忆的安卓游戏
    艾诺迪亚4是一款可玩性非常高的角色扮演RPG类手游,该游戏是《艾诺迪亚》系列的第四部作品,所以在本作中它不仅沿袭了系列最为核心的玩法元素,而且它还在其基础上进行了整体的优化和创新,因此它在拥有着精致细腻画面场景的同时,还有着系列游戏所不具备的精彩剧情!另外,该游戏的背景是发......