手记

【备战春招】第19天 嵌入式工程师学习笔记

【备战春招】第19天 嵌入式工程师学习笔记

课程信息

课程内容概述

1. 简介

本节介绍了C语言中的单向循环链表。

栈是限制在一端进行插入操作和删除操作的线性表(俗称堆栈),允许进行操作的一端称为“栈顶”,另一固定端称为“栈底”,当栈中没有元素时称为“空栈”。

顺序栈:栈的顺序存储结构叫做顺序栈。

2. 图形操作

  • 特点
    LIFO :last in first out ,后进先出。

  • 基本概念
    栈顶:一般用变量top来表示,在线性栈中表示我们数组的下标。

  • 本质
    栈就是我们特殊一点的线性表。同样具有前驱和后继,只不过,它限定了我们只能在一端进行插入和删除操作的线性表。也就是说,我们其实栈底是固定的,随着元素的增加,我们的栈顶top的值在变化。

3. 出栈和入栈

  • 入栈

栈的插入操作,我们叫做入栈。类似于子弹入弹夹。

  • 出栈

栈的删除操作,我们叫做出栈。类似于子弹射出。

  • 结论

顺序栈其实就是相当于我们的数组的操作,只不过这里多了一个top记录栈顶,其实就是相当于记录数组最后一个元素的下标

  • 栈的初始值

思考:空栈的时候,top的初始值是多少?

  • 假设top初值是0.

  • 假设top初值是-1

4. 代码示例

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

#define MAX 50
typedef char data_t;
typedef struct {
    data_t buf[MAX];
    int top;
} sepstack_t;

sepstack_t *create_sepstack()//创建新的栈
{
    sepstack_t *p = (sepstack_t *) malloc(sizeof(sepstack_t));
    if (NULL == p) {
        printf("malloc is fail!\n");
        return NULL;
    }
    memset(p, 0, sizeof(sepstack_t));
    p->top = -1;
    return p;
}

void push_sepstack(sepstack_t *p, data_t data)//入栈
{
    p->buf[++p->top] = data;
    return;
}

data_t pop_sepstack(sepstack_t *p)//出栈
{
    return p->buf[p->top--];
}

int is_empty_sepstack(sepstack_t *p)//判空
{
    return p->top == -1 ? 1 : 0;
}

int is_fuli_sepstack(sepstack_t *p)//判满
{
    return p->top == MAX - 1 ? 1 : 0;
}

int main() {
    data_t data[MAX];
    int i = 0;
    strcpy(data, "anihc evol I");
    int len = strlen(data);
    data_t res = 0;
    sepstack_t *p = create_sepstack();
    for (i = 0; i < len; i++) {
        push_sepstack(p, data[i]);
    }
    while (!is_empty_sepstack(p)) {
        res = pop_sepstack(p);
        printf("%c", res);
    }
    printf("\n");
    return 0;
}


运行结果

I love china

学习心得

C语言中的数据结构,实践练习了单向循环链表,感觉很有收获。

课程截图

1. 示例

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