首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

没有搞懂指针

2012-09-24 
没搞懂指针#include iostreamusing namespace stdtemplate class Tclass LinkQueueNode{public:T dat

没搞懂指针
#include <iostream>
 using namespace std;
 template <class T>
 class LinkQueueNode
 {
 public:
 T data;
  LinkQueueNode<T>* Link;//不解1
 LinkQueueNode(T& value):data(value),Link(NULL){}
 };
不解1)这里LinkQueueNode尚未定义完,可以在其类里面用自己类型声明一个指针(或非指针)???
 template <class T>
 class LinkQueue
 {
 LinkQueueNode<T> *front;
 LinkQueueNode<T> *back;
 public:
 LinkQueue():front(NULL),back(NULL){}
 void EnQueue(T& element);
 };
 template <class T>
 void LinkQueue<T>::EnQueue(T& value)
 {
 LinkQueueNode<T>* add = new LinkQueueNode<T>(value); //不解2:这里add->Link指向哪里???
 if(back == NULL)
 front = back = add;//如果添加第一个已有节点,则使front指向这个节点
 else
 {
 back->Link = add;//如果队列中已有节点,只需要更改back指针//不解3???
 back = back->Link;///?????
 }
 }
不解3:一个队列AA->BB->add(新增的),front指向AA,back指向BB,要新增add,则back要指向add,BB这个节点的Link也要指向add。那么back->Link = add;只是把back指向了add,而BB这个节点的Link并没有指向add!!!所以我觉得有问题,事实上我怕测试后又没问题,则应该是我哪儿理解错了。。。
真心求解释。。。

[解决办法]
不解1)这里LinkQueueNode尚未定义完,可以在其类里面用自己类型声明一个指针(或非指针)???

可以啊,在程序运行之前,编译器要把全部代码翻译成中间代码呀。
[解决办法]
可以,因为无论指向什么数据类型的指针,其大小都是一样的,只在使用该指针时才判断其类型
[解决办法]
//不解2:这里add->Link指向哪里??? 
指向NULL,因为初始化置为NULL了。
[解决办法]
back->Link = add;//如果队列中已有节点,只需要更改back指针//不解3???
back = back->Link;///?????

back每次添加add时都会在链表添加add后指向add,因此back永远指向该链表的最后一个节点,因此可以使用back指针来直接在最后一个节点后添加新节点
back=back->add一句,就是将back指针从指向以前的最后一个节点现在的倒数第二个节点改为指向现在的最后一个节点,这条语句运行完后back和add指向同一个节点

一个队列AA->BB->add(新增的),front指向AA,back指向BB,要新增add,则back要指向add,BB这个节点的Link也要指向add。那么back->Link = add;只是把back指向了add,而BB这个节点的Link并没有指向add!!!
添加add前,back指针指向BB,back->link=add,等价于BB.link=add;
[解决办法]
问题3

back = back->Link;///其实是back = add;
[解决办法]

探讨
我就是back指针指向BB,back->link=add,等价于BB.link=add; 这里搞不明白。。。
为什么等价呢?因为我觉得back->link=add只是改变了back的link,而没有改变BB的Link啊!他们两个的结构一样,值也只是相等而已。就好像a=b=3;现在a=4了,但b仍然等于3啊???

热点排行
Bad Request.