Java教程

指针 & 链表 & 链式向前星

本文主要是介绍指针 & 链表 & 链式向前星,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

指针 & 链表 & 链式向前星

指针

用于存放地址,全称“地址变量”
指针的定义与取地址如下

int *p; //创建指针
int a;  //定义整型变量
p = &a; //用p存放a的地址
*p =123 //更改a的值

优点: 可以很方便的更改数据或进行地址管理

缺点: 地址是随机生成的

链表

链表
一般来说,链表包含两部分:数值下一项的地址

优点: 很方便的插入删除元素

插入元素

思路:新增元素,把前一项指针指向新插入的项,把新项的指针指向下一项

void insertNode(int i, Node *p) 
{
   Node *node = new Node;
   node->value = i;
   node->next = p->next;
   p->next = node;
}

删除元素

思路:将要删除的元素前一项指针指向下下项

void deleteNode(Node *p) 
{
   p->value = p->next->value;
   Node *t = p->next;
   p->next = p->next->next;
   delete t;
}

链式前向星

一种用来以\(O(n)\)的时间复杂度来存储图的方法(个人觉得很玄学

// head[u] 和 cnt 的初始值都为 -1
void add(int u, int v) 
{
   nxt[++cnt] = head[u];                  // 当前边的后继
   head[u] = cnt;                         // 起点 u 的第一条边
   to[cnt] = v;                           // 当前边的终点
}

// 遍历 u 的出边
for (int i = head[u]; i != -1; i = nxt[i])//i != -1也可写成i~
{
   int v = to[i];
}
这篇关于指针 & 链表 & 链式向前星的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!