数据结构不是我的强项, 最要命的是,我从未看过一本中文的数据结构的书, 在我的脑子里只有英文概念.所以你上面所说的什么链栈,我都不知道是什么东西. 你叫我怎么帮你写程序呢? 还有置站空的算法, 我也不知道是什么意思. 所以没法写程序啊.你明白我的意思吗? 但是你写出来的程序我还是能看懂的, 所以帮你修改是没有问题的.
这几天
想你的天空
写的程序都是与数据结构有关的, 所以我让他帮你写, 有问题我会帮你们看看. 你可以看看他最近的帖子,我想可能会有你想要的东西.
头指针 头结点 首元结点, 这些都是中文概念, 由于我没看过中文的书, 所以只能猜猜了.
指针这个概念我是清楚的, 是指一个变量, 或者说一个对象的存储地址. 但是既然是头指针,
那就是说他是第一个,那么这就是一个相对于其他对象的位置来讲的. 比如一个一维数组, 他的头指针就是数组的第一个元素的地址. 节点是个数据结构的概念, 可以用一个struct 来描述它,
比如 struct Node
{
int data;
Node * next;
};
如果把这些节点连起来, 那么我就有了一个链表, 因为每个节点都知道他的下一个节点的地址, 那么我们便可以操作这些节点了,在这个链表中的第一个节点便是头节点了. 至于首元结点, 是个中文概念, 首元应该就是头的意思, 所以我看不出首元节点和头节点的区别.所以怎么来理解首元节点就完全是定义的问题了. 所以就要看中文书上是怎么来定义首元节点了.
顺序存储结构和链式存储结构这也是中文定义的问题了, 我这里只能猜了. 既然说是顺序, 那么对象的地址是有顺序性的, 也就说如果我们有一个表, 表中有 object1, object2, object3,... 那么他们的地址具有一个连续性.
我们知道对于一个链表我们可以有插入这么一个方法. 那么当插入元素的时候发生了什么了呢, 或者说我们如何来实现插入一个元素呢? 做法是这样的,我们创立一个 元素对象, 我们要知道前面一个元素的地址, 我们还要知道插入元素的后面一个元素的地址. 将这两个元素的连接断开,然后将前面一个元素连接到那个插入元素, 然后再将插入元素连接到那个后面元素, 这样我们就实现了插入. 这样做的好处是什么呢?你想想,我们在插入的时候, 只是将他们断开然后重新连接, 这样他们的原来的位置并没有改变, 也就是说, 不需要将后续元素作移位,这样程序的效率是不是就提高了? 不过由于那个插入的元素的地址是空间开辟时由系统创立的, 所以就没有顺序性可言了.而顺序性链表的插入怎么来做呢?做法是这样的, 你开辟一个新的空间放到链表的最后, 然后将插入元素后面的元素统统向后移一位, 然后将插入元素的数据放到那个腾出来的空间,现在你看到了,对于顺序链表的插入就有一个移位的动作, 而这个移位的动作是有时间开销的,所以程序的效率就降低了.
也就是说非顺序存储结构要比顺序存储结构在插入元素和删除元素时效率来的高. 那么顺序性存储结构的优点在哪里呢?由于顺序性的存在,那么在搜寻一个元素时, 指针不必前后左右的跳来跳去, 这样对于大的数据量,搜寻速度可以提高.这就是顺序性存储结构的优点.不过对于小数据量这种优点是感觉不出来的.
以上是我的一些个人看法, 说的不全或不对的地方望见谅.