战30天C++入门极限-C/C++中结构体(struct)知识点强化(2)

程序种有两个组成部分

 

test *create()

  和

void showl(test *head)

  这两个函数,create是用来创建链表的 ,showl是用来显示链表的。

  create函数的返回类型是一个结构体指针,在程序调用的时候我们用了showl(create());,而不用引用的目的原因是引导指针是一个全局指针变量,我们不能在showl()内改变它,因为showl()函数内有一个移动操作head=head->next;,如果是引用的话我们就破坏了head指针的位置,以至于我们再也无法找会首地址的位置了。

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

  首先,我们写这个程序,要考虑到由于是一个链表结构,我们不可能知道它的大小到底是多大,这个问题我们可以用动态开辟堆内存来解决,因为堆内存在程序结束前始终是有效的,不受函数栈空间生命期的限制,但要注意的是我们必须有一个指针变量来存储这一链状结构的进入地址,而在函数内部来建立这一指针变量显然是不合适的,因为函数一旦退出,这个指针变量也随之失效,所以我们在程序的开始声明了一个全局指针变量。

 

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

  好解决了这两个问题,我们接下去思考

  有输入就必然有输出,由于输出函数和输入函数是相对独立的,为了不断测试程序的正确性好调试我们先写好输出函数和main函数捏的调用,创建函数我们先约定好名为create。

  我们先写出如下的代码:

#include <iostream
using namespace std; 
 
struct test 

    char name[10]; 
    float socre; 
    test *next; 
}; 
 
test *head;//创建一个全局的引导进入链表的指针 
 
test *create() 

 
    return head;//返回链首指针 

 
void showl(test *head) 

    cout<<"链首指针:"<<head<<endl; 
    while(head)//以内存指向为null为条件循环显示先前输入的内容 
    { 
        cout<<head->name<<"|"<<head->socre<<endl; 
        head=head->next; 
    } 

 
void main() 

    showl(create()); 
    cin.get(); 
    cin.get(); 
}

  程序写到这里,基本形态已经出来,输入和调用我们已经有了。

  下面我们来解决输入问题,链表的实现我们是通过循环输入来实现的,既然是循环我们就一定得考虑终止循环的条件,避免死循环和无效循环的发生。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值