前言
今天学习一门新的招式,八卦掌又称为游身八卦掌、八卦连环掌,是一种以内功和外功相结合,以掌法变换和行步走转为主要特点的中国传统拳术。
本次主要学习掌法变换
我们学的是无头单向非循环链表
如八卦掌招数有问题,或可以优化,望各位大侠进行斧正。(ง •̀_•́)ง(ง •̀_•́)ง(ง •̀_•́)ง
提示:以下是本篇文章正文内容,下面案例可供参考
一、链表是什么?
概念:链表是⼀种物理存储结构上⾮连续、⾮顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的 。
我们可以把链表想象成一列火车,这列火车有一个火车头和n个车厢,乘客的数量决定了车厢的数量。车厢有挂钩将车厢之间连接起来。我们把车厢想象成物理空间,指针指向的地址表示挂钩,链表的结构体表示车厢的形状。
二、实现单链表
1.结构体的定义
根据上面的图,我们应该知道。单链表是一个结构体,这个结构体有两个空间。一个是链表的数据,它放在结构体里面,一个是指向下一个结构体的类型,它也放在结构体之中。
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <stdbool.h>
typedef int stl_type; // 对变量名进行重命名
typedef struct s_list_node (车厢)
{
stl_type data; // 存放数据的类型 (乘客)
struct s_list_node* next; 指针的类型是这个结构体的类型 (车钩)
}s_l_node;
2.八大掌
2.1 起手(扩容)
在学习八大掌之前我们要打基础,又称起手式
当我们要放进n个数据,怎么定义,这就和动态顺序表一样,对结构体进行扩容,需要放进去几个就扩容几个。扩容的大小为一个结构体的大小。同时对其进行判断,是否扩容成功。
这里的扩容是指,我们向内存要一块空间(车厢)并且放入数据(乘客)。所以,我们传进来的是数据,同时地址指向空,这是防止地址出现野指针。
s_l_node* add_capaci