手记

【九月打卡】第5天【养成记】嵌入式挑战第5天 学习顺序表的相关操作

课程名称:

物联网/嵌入式工程师

课程章节(阶段二第五周 数据结构顺序表1-6):

顺序表之创建,判满,插入,输出(上)课程链接

老师:

大白老师

课程内容:

对顺序表进行创建,判满,插入,输出操作

学习笔记:

  • 线性表的顺序存储结构我们也叫做顺序表,它指的是用一段地址连续的存储单元依次存储线性表中的数据元素

  • 线性表的特征:对非空表,a0是表头,无前驱,a9是表尾,无后继。其它的每个元素an有且仅有一个直接前驱(an-1)和一个直接后继(an+1)。

  • 设顺序表 L=(a0,a1, ……,an-1),对 L的基本运算有:

  • 建立一个空表 : create_emtpy_seqlis()

  • 判断表是否为满 : is_full_seqlist();

  • 插入数据 : insert_data_seqlist();

  • 输出数据 : print_data_seqlist();

  • 判断表是否为空 : is_empty_seqlist();

  • 删除数据 : is_full_seqlist();

代码

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define MAX 20

typedef int datatype_t;

typedef struct{
        datatype_t buf[MAX]; //定义数组存储数据
        int n; //数组中有效元素的个数
}seqlist_t;

//为结构体在堆区分配空间
seqlist_t *create_empty_seqlist()
{
        seqlist_t *l = NULL;
        l = (seqlist_t *)malloc(sizeof(seqlist_t));        
        if(NULL == l)
        {
                printf("malloc is fail!\n");        
                return NULL;
        }

        memset(l,0,sizeof(seqlist_t));
        l->n = 0;
        return l;
}

//判断顺序表是否满了,
int is_full_seqlist(seqlist_t *l)
{
    return l->n == MAX ? 1 : 0;
}

//插入数据
void insert_data_seqlist(seqlist_t *l,datatype_t data)
{
    l->buf[l->n] = data;        
    l->n = l->n + 1;
}

//输出数据
void printf_data_seqlist(seqlist_t *l)
{
        int i = 0;

        for(i = 0;i < l->n;i++)
        {
                printf("%d ",l->buf[i]);        
        }
        printf("\n");
}
int main()
{
    seqlist_t *l = NULL;
    l = create_empty_seqlist();
    datatype_t data;
    printf("please input %d number : ",MAX);
    //满了只取前MAX个
    while(!is_full_seqlist(l))
    {
            scanf("%d",&data);        
            insert_data_seqlist(l,data);
    }
    printf_data_seqlist(l);
    // 释放空间
    delete l;
    l = NULL;
    return 0;
}

打卡

课程评价

本节主要讲解对顺序表的相关操作,这不仅是顺序表有这些操作,其他的数据结构也会有同样的操作,只是存储的方式不同。大白老师,边写代码,边用画图工具解释每一步操作,这些数据在内存是如何变化的,通俗易懂,然后再跟着老师敲代码,很快就掌握了本节课的内容。

0人推荐
随时随地看视频
慕课网APP