【备战春招】第20天 嵌入式工程师学习笔记
课程信息
- 课程名称:物联网/嵌入式工程师
- 章节名称:第5周之第三讲 1-2 顺序栈的代码实现
- 讲师姓名:大白老师
课程内容概述
1. 简介
本节介绍了C语言中的顺序栈的代码实现。
2. 图形操作
- 数据类型的设计
//数据元素的类型
typedef int data_t;
#define MAX 5
//顺序栈的类型
typedef struct
{
//数组存储数据元素
data_t buf[MAX];
//记录当前栈顶位置的栈顶指针(下标)
int top;
}seqstack_t;
3. 代码常用操作
创建空的顺序栈,top == -1
seqstack_t *create_empty_seqstack()
{
//1.为顺序栈在堆区分配空间,用s保存首地址
seqstack_t *s = (seqstack *)malloc(sizeof(seqstack_t));
if(NULL == s)
{
printf("malloc is fail\n");
return NULL;
}
memset(s,0,sizeof(seqstack));
//2.置为空栈,s->top = -1;
s->top = -1;
//3.返回顺序栈的首地址
return s;
}
顺序栈的判空,比较top 和 -1
//2、顺序栈的判空,比较top 和 -1
// 成立返回1,不成立返回0
int is_empty_seqstack(seqstack_t *s)
{
return s->top == -1 ? 1 : 0;
}
顺序栈的判满,比较top 和 N - 1
int is_full_seqstack(seqstack_t *s)
{
return s->top == MAX - 1 ? 1 : 0;
}
入栈push,先移动top,再插入数据
void push_seqstack(seqstack_t*s,data_t data)
{
s->buf[++s->top] = data;
return ;
}
出栈pop,先取数据,再移动top
data_t pop_seqstack(seqstack_t *s)
{
return s->buf[s->top--];
}
获得栈顶元素
data_t get_top_data(seqstack_t *s)
{
return s->buf[s->top];
}
主函数测试
int main()
{
int i = 0;
data_t ret = 0;
//创建s,保存了顺序栈的首地址
seqstack_t *s = create_empty_seqstack();
//当栈没有满的时候,插入数据
while(!is_full_seqstack(s))
{
push_seqstack(s,i++);
}
printf("top : %d\n",get_top_data(s));
printf("pop : %d\n",pop_seqstack(s));
while(!is_empty_seqstack(s))
{
ret = pop_seqstack(s);
printf("%d ",ret);
}
putchar('\n');
return 0;
}
学习心得
C语言中的数据结构,实践练习了顺序栈的代码实现,感觉很有收获。