background image

 

个节点在堆内存中动态开辟空间 cin>>ls->name>>ls->socre; }

le->next=NULL;//把链尾指针的 next 设置为空,因为不管如何循环总是要结束的,设置为空

 

 

才能够在循环显链表的时候不 至于死循环 delete ls;//当结束的时候最后一个动态开辟的
内存是无效的,

 

所以必须清除掉 return head;//

 

返回链首指针 }

void showl(test *head) { coutnext;

void main() { showl(create()); cin.get(); cin.get(); } 上面的代码我们是要达到一个目的:就是

 

要存储你输入的人名和他们的得分,并且以链状结构把它们组合成一个链状结 构。

 

程序种有两个组成部分 test *create()   

和 void showl(test *head) 这两个函数,create 是用来创

 

建链表的 ,showl 是用来显示链表的。

create 函数的返回类型是一个结构体指针,在程序调用的时候我们用了 showl(create());,

 

而不用引用的目的原因是引 导指针是一个全局指针变量,我们不能在 showl()内改变它,
因为 showl()函数内有一个移动操作 head=head->next;

 

,如果是引 用的话我们就破坏了

head 指针的位置,以至于我们再也无法找会首地址的位置了。

下面我们来分解整个程序,以一个初学者的思想来思考整个程序,由浅入深的逐步解释。

首先,我们写这个程序,要考虑到由于是一个链表结构,我们不可能知道它的大小到底

 

是多大,这个问题我们可以用动 态开辟堆内存来解决,因为堆内存在程序结束前始终是

 

有效的,不受函数栈空间生命期的限制,但要注意的是我们必须有一个 指针变量来存储
这一链状结构的进入地址,而在函数内部来建立这一指针变量显然是不合适的,因为函

 

数一旦退出,这个指针 变量也随之失效,所以我们在程序的开始声明了一个全局指针变
量。

test *head;//

 

创建一个全局的引导进入链表的指针 好解决了这两个问题,我们接下去思考

有输入就必然有输出,由于输出函数和输入函数是相对独立的,为了不断测试程序的正

 

确性好调试我们先写好输出函数 和 main 函数捏的调用,创建函数我们先约定好名为
create。

我们先写出如下的代码:

#include using namespace std;

struct test { char name[10]; float socre; test *next;

};

test *head;//创建一个全局的引导进入链表的指针