-
p←1→n
话虽如此,我希望你明白,现在有一个循环双链表的4个节点,每个节点的地址相当于这四个节点的位置。
每个位置存储 3 条信息、数据和两个指针。
例如,节点 1 有数据,p 指针和 n 个指针,p 指针指向 4 的位置,n 指向 2 的位置,节点 2 也有一个数据和两个指针,其 p 指向节点 1 的位置,n 个指针指向节点 3 的位置......
在这里,将节点的地址与节点的位置进行比较,节点的位置本质上是节点存储在计算机内存上的三条信息的位置。
-
#include
struct tnode
tnode pre;
tnode next;
int seq;
int main()
tnode pnode[5], temp;
int n = 5, i = 0;
链表初始化。
for (i; i < n; i++)
pnode[i].next = pnode[i+1];
if ( i != 0)
pnode[i].pre = pnode[i-1];
pnode[i].seq = i;
链表节点交换、交换 3 和 4
temp = pnode[3];
交换,然后重新分配 3 的正面和背面,以及 4 的正面和背面。
return 0;
-
让我们打个比方。 将链表节点视为一个人,将链表指针视为人手(左手是前进指针,右手是后向指针)。
非循环单向链表如下所示:几个人排成一排,每个人的右手指向他右边的人,最右边的人指向空气(null)。 如果你想找到这一行中的任何人,你必须从行的头部(链表标题)开始,朝你的手指方向看。
一个圆形的单向链表是这样的:几个人围成一个圆圈,每个人举起右手指向右边的人,这样每个人的右手都指向一个人(如果只有一个人,他的右手指向自己)。 从任何一个人开始,你可以继续沿着手指的方向循环,找到每个人。
非循环双链表如下所示:连续的多个人,每个人举起左手指向左边的人,每个人举起右手指向右边的人,然后最左边的人的左手指向空气(null),最右边的人的右手指向空气(null)。 如果你想在这一行找到一个目标人,你可以从任何人开始,尝试在左边方向找到它,如果你找不到它,你可以继续在右边方向搜索,直到你找到目标人。
一个圆形的双链列表看起来像这样:几个人围成一圈,每个人举起左手指向左边的人,每个人举起右手指向他右边的人,这样每个人的左右手都可以指向一个人(如果只有一个人, 然后他的左手和右手都指向自己)。无论您选择左手还是右手方向,您都可以继续循环以找到每个方向。
-
排序作为示例。
比如。 有 10 个数字。 从大到小排序为有序数组 a[0] a[9]。
在这种情况下,如果要在添加第 11 个数字时保持新数组的顺序,假设该值将插入到 a[n] n<9 中;
这意味着 a[n]-a[9] 在插入前应向后移动一个位置,并且应插入 a[n]
这样。 还有更多操作说明。
如果使用链表,只需在几个操作中插入n个节点和附近节点的信息即可。
单向链表和双向链表是。 插入和遍历灵活性。
假设您在链表中找到了一个节点 p。 现在你必须通过他面前的 n 个节点并打印出来。
在两个方向上,它可以直接反转并逐个打印。
而且是单向的。 可以生成并打印出节点 P 后面的 n 个节点。
您的程序可以提出一个按特定标准排序的有序数据集(例如档案),存储在书目链表中,并使用文件编号输入。
1. 打印出文件的其他信息(例如日期)
2. 打印出文件中的前 n 条信息。
3.文件后打印出n条信息。
函数 2 和 3 被写成函数,将参数作为节点指针传入,因此在函数中您将找到链表的结构优势。
-
双链表的特点是,从一个节点中,可以找到它前面的节点和它后面的节点,而不是从开始节点循环。
cin 的内容缓存了,需要通过以下两行清除**,必须先清除标志,然后同步清除缓冲区。;; >>>More