单链表的访问。

单链表的访问:
只要我有头指针head,就可以通过其成员next继而找到下一个结点,以此类推可以访问所有的结点。
所谓的访问可以理解为取各个结点数据域的值进行一系列的操作,输出单向链表各个结点的数据域是最简单的访问链表的操作。

将链表中各个结点数据一次输出的步骤主要如下:
(1),找到链表的头指针
(2),若链表非空,则输出结点的成员值。否则退出
(3),寻找下一个结点
(4),转到步骤2

例子:编写函数print,顺序输出存放学生信息的单向链表各个结点数据域中的内容。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//定义结构体
struct node
{
    int id;
    char name[20];
    int score;
    struct node*next;
};
typedef struct node SNODE;

//主函数
int main()
{

    SNODE *creat(SNODE *head);  //函数声明
    void print(SNODE *head);

    SNODE *head;   //定义头指针
    head=NULL;  //建立一个空链表
    head=creat(head);   //创建
    print(head);  //调用函数输出链表
    return 0;
}

SNODE *creat(SNODE *head)
{
    int id;
    char name[20];
    int score;

    SNODE *r;
    SNODE *s;

    head=(SNODE*)malloc(sizeof(SNODE));
    r=head;    //找到主函数创建的链表的头指针
    printf("输入学号");
    scanf("%d",&id);
    while(id!=0)
    {
        printf("输入姓名");
        scanf("%s",name);
        printf("输入成绩");
        scanf("%d",&score);
        s=(SNODE*)malloc(sizeof(SNODE));  //申请新的结点

        //将数据存放在新的节点中
        {
            s->id=id;
            strcpy(s->name,name);
            s->score=score;
            r->next=s;

        }

        //指针移动
        r=s;
        //输入下一个数据
        printf("输入学号");
        scanf("%d",&id);
    }
    r->next='0';
    return head;
}

//输出链表函数
void print(SNODE *head)
{
    SNODE *p;
    p=head->next;  //p指向头节点后的第一个结点
    if(p=='0')
        print("这是个空链表");
    else
    {
        printf("学生信息为\n");
        do
        {
            printf("%d %s %d",p->id,p->name,p->score);
            p=p->next;
        }while(p!=NULL);
        printf("end\n");
    }
}

说明:main函数中用指针head来调用print函数,也就是将一个已经建立好了的链表的头指针传递给print函数在print函数中就可以从head出发通过next域找到各个结点。

链表的插入:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值