C/C++学习——自定义数据类型——链表

链表的概念

一、链表的概念
1、链表是一种存储空间能动态进行增长或缩小的数据结构。
2、链表主要用于:
(1)建立不定长度的数组。
(2)可以在不重新安排整个存储结构的情况下,方便且迅速地插入和删除数据元素。
3、链表广泛应用于数据管理中。
二、结点

 struct  NODE{
   //结点数据类型
    ElemType  data;//数据域
    NODE *link;//指针域
  };

1、ElemType 可以是简单的内置数据类型,也可以是复杂的数据类型,

typedef  struct  tagElemType{
   // 复杂的数据元素类型
//任意数目、任意组合、任意类型的数据成员
}  ElemType;//对结构体tagElemType重新命名。

(1)数据域是链表中的信息对象(元素),实际应用中结合具体要求设计其数据类型。为方便介绍,将ElemType简单设定为int型,即:

typedef int ElemType;

(2)link成员表示指针域,存放另一个结点的地址,是链表中的组织者。
在这里插入图片描述L:为头指针
头节点:第一个结点
尾结点:最后一个结点的指针域为0;

链表的分类

一、单链表
单链表每个结点包含一个指向直接后继结点指针域。其形式为:

struct  LNode{
   //单链表结点类型
	ElemType data;//数据域
	LNode *next;//指针域:指向直接后继结点
};

typedef LNode*  LinkList;//LNode 为单链表结构体类型,LinkeList为单链表指针类型

next指向直接后继结点,由他构成了一条链。
二、双链表
双链表每个结点包含指向前驱节点和指向后继结点的指针域。

struct  DNode{
   //双链表结点类型
	ElemType data;//数据域
	DNode *prev,*next;//指针域:分别指向前驱结点和后继结点
};
typedef DNode *DLinklist;//DNode 为双链表结构体类型,DinkeList为双链表指针类型

在这里插入图片描述三、循环链表
1、若单链表尾结点指向头结点而不是0,则该链表是循环单链表。
2、若双链表尾结点next指向头节点而不是0,头节点的prev指向尾结点而不是0,则该链表是循环双链表。
在这里插入图片描述

创建单链表

LinkList p;//链表指针
p=new LNode;//分配LNode 类型内存单元且将地址保存到p中

创建链表常用两种方法:头插法和尾插法
一、头插法创建链表
1、头插法创建链表的步骤:
(1)创建头节点L,设置L的next为0;
(2)动态分配一个结点s,输入s的数据域。
(3)将s插入到开始结点之前,头结点之后。
(4)重复(2)~(4)步骤加入更多结点。

#include <iostream>
using namespace std;

typedef int ElemType;//简单的数据元素类型
struct LNode{
   //单链表结点类型
	ElemType data;//数据域
	LNode *next;//指针域:指向直接后继结点
};
typedef LNode* LinkList;//LNode为单链表结构体类型,LinkList为单链表指针类型
void input(
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在C语言中,可以使用new关键字来动态分配内存空间来创建自定义数据类型的对象。然而,需要注意的是,C语言中并没有提供类似C++中的构造函数和析构函数来初始化和销毁对象。因此,在使用new关键字创建自定义数据类型的对象时,需要手动分配内存空间,并对对象的成员进行初始化。 引用[2]中的代码示例展示了如何使用new关键字创建链表的头结点,并通过输入函数input来初始化链表的数据域。在该示例中,使用了typedef来定义了一个简单的数据元素类型ElemType,并定义了一个单链表结点类型LNode和一个单链表指针类型LinkList。 在C语言中,可以使用malloc函数来动态分配内存空间,然后使用指针来访问和操作该内存空间。例如,可以使用以下代码来创建一个自定义数据类型的对象: ```c typedef struct { int data; // 其他成员 } MyStruct; MyStruct *obj = (MyStruct *)malloc(sizeof(MyStruct)); ``` 在上述代码中,使用malloc函数分配了一个大小为MyStruct的内存空间,并将返回的指针强制转换为MyStruct类型的指针。然后,可以通过该指针来访问和操作该对象的成员。 需要注意的是,在使用完对象后,需要使用free函数来释放动态分配的内存空间,以避免内存泄漏。例如,可以使用以下代码来释放上述示例中创建的对象: ```c free(obj); ``` 总结起来,使用new关键字来创建自定义数据类型的对象在C语言中并不常见,通常使用malloc函数来动态分配内存空间,并手动初始化对象的成员。然后,使用free函数来释放动态分配的内存空间。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值