当前位置:首页阅读

链表

链表

链表

链表

今天教大家up好久才琢磨明白的链表~

链表:

定义一个含有 int类型 和 指向node类型的指针 的数据类型(结构体,下文有讲解),其中每个指针都指向下一个数据储存的内存地址即可

对于数组,想要在一列数中插入一个或多个数,就需要使数据依次向后移到下一个下标的空间里,造成程序的运行时间也很大,用链表这种结构就可以很简单的插入和删除数据了

首先,大家需要了解什么是指针

在c++中指针的应用非常广泛

以下是指针教程:

首先创建一个int a,再创建一个int型指针变量*p

格式如下:

int a;

int *p;//指向什么类型就定义什么类型

此时再加入以下语句

p=a;//指针变量p中存的是int a在内存中的地址,为取址符,顾名思义就是获取地址的操作

coutp;

程序则输出一串16进制数,内容为p的值(也就是a的地址)

*p=1//则是用指针间接操作int a,此语句给a赋值为1,*p 代表p地址中存的数据

以上就是指针的基本操作,大家可以自己试试改改数据和语句,摸索摸索

其次要了解结构体

结构体就是将多种类型的数据放在一起,作为一个新类型的数据使用

struct node//建立一个”node”类型的数据

{

int data;

int data2;

};//结尾一定要加分号

访问和操作数据呢,用.符来操作,如下

node a;//创建一个node型的数据命名为a

根据上面的定义可以知道node型包含int data和data2

node.data=1;

coutnode.data;

cinnode.data;

coutnode.data;

既可以实现对数据的操作

如果创建的是指向node类型的指针呢

node *p;

那么访问数据就要用-符号来表示了,即:

cinnode-data;

coutnode-data;

输入一个值

输出的就是刚刚输入的值了

下面介绍一个实现链表所需的一个函数malloc()

malloc需要头文件#includecstdlib

格式:(i数据类型*)malloc(存储数据所需的内存字节数);//可以用sizeof(数据类型);来获取数据类型所需要的字节

(int*)malloc(sizeof(int));

功能是动态获取内存中的一块区域的地址,大小可以储存一个int变量

int *p;

p=(int*)malloc(sizeof(int));

cin*p;

coutp *pendl;

运行后可见输出的是分配的地址以及此地址中存的数据

那这个函数的意义是什么呢?不急,这个运用非常巧妙,继续往下看

先把程序贴出来,不要被篇幅所吓倒,实际原理很简单的~

#include iostream

#include cstdlib

using namespace std;

struct node

{

int data;

struct node *next;

};

int main()

{

node *head,*p,*q,*t;

int a,n;

cinn;

head=NULL;

for(int i=0;in;i++)//以下为创建链表

{

cina;

p=(node*)malloc(sizeof(node));

p-data=a;

p-next=NULL;

if(head==NULL)

{

head=p;

}

else

{

q-next=p;

}

q=p;

}

cina;//以下为插入数据

t=head;

while(t!=NULL)

{

if(t-next==NULL || t-next-dataa)//下一个节点的值大于a或无下一个节点

{

p=(node*)malloc(sizeof(node));

p-data=a;

p-next=t-next;

t-next=p;

break;

}

t=t-next;

}

t=head;//以下为输出

while(t!=NULL)

{

printf(%d ,t-data);

t=t-next;

}

return 0;

}

自己悟明白了没有?

创建链表的过程其实是根据动态分配的地址存入数据,虽然*p,*q,*t,*head都在改变

但每次操作后本节点数据和下一个节点的地址都储存在了内存中,所以只要使head指向第一个节点,就可以用t=t-next;来依次获取下一个节点的地址并操作数据了

以下是我本人研究时在草纸上的模拟~

链表_WWW.XUNWANGBA.COM

链表结构以及创建操作示意图

链表_WWW.XUNWANGBA.COM

循环次数少时程序运行顺序示意图

算法是建立在语法的基础上的,最主要还是要自己去理解去悟,若有疑问可以在评论中向我提问~

关于链表的c++专栏就到此结束啦~

b站up主提醒您,道路千万条,三连第一条,看完不三连,up两行泪

以上就是(链表)全部内容,收藏起来下次访问不迷路!