数据结构--第一天

--顺序表

        -顺序表的概念

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

        -顺序表相关函数

           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);
        }
}

  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值