数据结构——单链表的定义

单链表的定义

什么是单链表

链表定义:用链式存储的线性表统称为链表

链表分类:单链表、双链表、循环链表、静态链表

一、顺序表和单链表的对比

二、用代码定义一个单链表

三、两种实现方式

四、总结

一、顺序表和单链表的对比

  顺序表 单链表
存储结构 顺序存储 链式存储
优点 随机存储 对连续空间无要求
缺点 要求大片连续空间 不可随机存取,耗费一定空间存放指针
内容 只存放数据元素 存放数据元素及指向下一个节点的指针

 

二、用代码定义一个单链表

1.初级写法

struct LNode{        //定义单链表结点类型
    ElemType data;        //每个结点存放一个数据元素
    struct LNode *next;        //指针指向下一个节点
};
struct LNode *p = (struct LNode *)malloc(sizeof(struct LNode));
//增加一个新的结点,在内存中申请一个结点所需空间,并用指针p指向这个结点

typedef关键字——数据类型重命名

typedef <数据类型> <别名>

如:typedef int zhengshu; ——  int x = 1 (zhengshu x = 1)

struct LNode{
    ElemType data;
    struct LNode *next;
};
typedef struct LNode LNode;
LNode *p = (LNode *)malloc(sizeof(LNode));

2.高级写法

typedef struct LNode{
    ElemType data;
    struct LNode *next;
}LNode,*LinkList;

表示一个单链表时,只需声明一个头指针L,指向单链表的第一个结点

LNode * L;        //声明一个指向单链表第一个结点的指针
LinkList L;        //声明一个指向单链表第一个结点的指针

LNode * L与 LinkList L比较

  LNode *L LinkList L
侧重点 强调这是一个结点 强调这是一个单链表

三、两种实现方式

1.不带结点的单链表

typedef struct LNode{
    ElemType data;
    struct LNode *next;
}LNode,*LinkList;

//初始化一个空的单链表
bool InitList(LinkList &L){    &:代表L的引用,若无&,就表示L的复制品,L并未改变
    L = NULL;        //空表,暂时没有任何结点,防止脏数据
    return true;
}

void test(){
    LinkList L;        //声明一个指向单链表的指针,并没有创建结点
    InitList(L);        //初始化一个空表
}

  2.带结点的单链表

typedef struct LNode{
    ElemType data;
    struct LNode *next;
}LNode,*LinkList;

//初始化一个单链表(带头结点)
bool InitList(LinkList &L){
    L = (LNode *)malloc(sizeof(LNode));       //分配一个头结点,不存储数据
    if(L = NULL)       //内存不足,分配失败
        return false;
    L->next = NULL;    //头结点之后暂时还没有节点
    return true;
}

void test(){
    LinkList L;
    InitList(L);
}

3.两种方式的比较

不带结点 带结点
下一个指向的结点存放数据 声明的结点不存放数据,下一个指向的结点存放数据

 

四、总结

发布了123 篇原创文章 · 获赞 169 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/qq_40310148/article/details/105690178
今日推荐