摘要:今天做了一个简单的题目。但是,我发现,在传参数的时候,如果不使用引用传参,那么头指针就会随着tmp指针向后移动。如果使用引用传参的话,它就不会了。题目:http://acm.swust.edu.cn/oj/problem/172/View Code #include<stdio.h>#include<stdlib.h>#include<string.h>typedef struct node{ int n; struct node *next;}node;node *A, *B, *ta, *tb, *p;void Init_AB(){ A = (node*
阅读全文
摘要:邻接表使用在什么时候呢?想了想,觉得应该用来存储树。还是来看一个例子吧。题目:在一棵根树上,Alice和Bob分别在其中某些结点上有一些大石头。 现在Alice和Bob轮流移动属于自己的石头,移动的规则是这样的, 选择某个结点上的一块石头,将石头移到该结点的父结点,当然, 位于根结点的石头是不可移动的,因为根结点没有父结点。Alice 先移动,当一方没有石头可移动的时候就输了。题解:只需计算每个石头的移动次数,即所在结点在根树中的深度即可。 现在我们已知的是根结点为0,那么我们我们可以用邻接表来存储, 可以从0号结点对远向图进行遍历,可采用深度优先或广度优先 来做。...
阅读全文
摘要:在用链表的时候有一点要十分的注意,这一点是相当的关键,简直是太重要了。之所以能在这里来说这一点,这个还要归功于我的数据结构老师“李学俊”了。好了, 不废话了,直入话题。这一点就是:在用链表的时候,head指针不要存储任何数据,也就是说head的数据域是不放入数据的,那用来做什么呢?这个问的好,它就在那空着,什么也不做。可以说head是一个特殊的结点,也可以说它不是结点,因为结点包括了数据域和指针域,但是head严格来说只有指针域,虽然有数据域,但是不起作用。下面来看一个我的代码,其中包括了建表,删表,和在末尾增加数据三个功能。View Code #include "iostream&
阅读全文
摘要:链表是由一个一个的结点组成的。什么是结点呢?请看下图……2.那么结点的组成是什么呢?也就是说怎么才能实现那样的结点呢?请看下图……其实上面的图也没有解决我刚刚说的问题,好了,直接说了吧,结点的实现是用结构体来实现的。没错,就是 结构体 了。上面的图像能够让我们更加清楚的认识到写链表用的结构体和平常用的结构体的区别。真的是这样的,你看出来了吗?没有的话就再仔细看看吧。
阅读全文