课程名称:
物联网/嵌入式工程师
课程章节(阶段二第五周 数据结构顺序表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;
}
打卡
课程评价
本节主要讲解对顺序表的相关操作,这不仅是顺序表有这些操作,其他的数据结构也会有同样的操作,只是存储的方式不同。大白老师,边写代码,边用画图工具解释每一步操作,这些数据在内存是如何变化的,通俗易懂,然后再跟着老师敲代码,很快就掌握了本节课的内容。