正在阅读:C/C++中结构体(struct)知识点强化C/C++中结构体(struct)知识点强化

2005-03-07 15:12 出处:PConline 作者:管宁 责任编辑:xietaoming


  在create()函数内部我们先写成这样:

test *create() 

    test *ls;//节点指针 
    test *le;//链尾指针 
    ls = new test;//把ls指向动态开辟的堆内存地址 
    cin>>ls->name>>ls->socre; 
    head=NULL;//进入的时候先不设置head指针指向任何地址,因为不知道是否一上来就输入null跳出程序 
    le=ls;//把链尾指针设置成刚刚动态开辟的堆内存地址,用于等下设置le->next,也就是下一个节点的位置 
 
 
    le->next=NULL;//把链尾指针的next设置为空,因为不管如何循环总是要结束的,设置为空才能够在循环显链表的时候不至于死循环 
    delete ls;//当结束的时候最后一个动态开辟的内存是无效的,所以必须清除掉 
    return head;//返回链首指针 
}

  在循环创建之前我们必须考虑一个都不输入的情况。

  程序一单进入create函数我们首先必然要创建一个节点,我们先创建一个节点指针,后把者个节点指针指向到动态开辟的test类型的动态内存地址位置上。

  所以我们有了

test *ls;
ls = new test;

  程序既然是循环输入,而结构成员test *next又是用来存储下一个接点的内存地址的,每次循环我们又要动态创建一个新的内存空间,所以我们必须要有一个指针来存储上一次循环动态开辟的内存地址,于是就有了

test *le;

  接下来在进入循环前我们要创建链表的第一个节点,第一个节点必然是在循环外创建,于是就有了

cin>>ls->name>>ls->socre;

  程序执行者的情况是位置的,所以我们必然要考虑,一上来就不想继续运行程序的情况,所以我们一开始先把head引导指针设置为不指向任何地址也就是

head=NULL;

  为了符合le也就是链尾指针的设计思路,我们在循环前一定要保存刚刚动态开辟的内存地址,好在下一次循环的时候设置上一个节点中的next成员指向,于是我们便有了:

le=ls;

  为了实现循环输入我们又了下面的代码:

while(strcmp(ls->name,"null")!=0)
{
if(head==NULL)
{
head=ls;
}
else
{
le->next=ls;
}
le=ls;
ls=new test;
cin>>ls->name>>ls->socre;
}

  程序是循环必然要有终止循环的条件,所以我们的循环条件是:

while(strcmp(ls->name,"null")!=0)

  输入的名字是null的时候就停止循环。

  为了保证第一次进入循环,也就是在循环内准备创建第二个节点前,设置引导指针的指向我们有了如下的判断代码:

if(head==NULL)
{
head=ls;
}
else
{
le->next=ls;
}

键盘也能翻页,试试“← →”键

关注我们

最新资讯离线随时看 聊天吐槽赢奖品