初识C语言链表

小白初学链表(涉及数组)

超级详细非常适合纯白小白阅读,请各位大佬移步orz

(emm下面代码的注释是我的碎碎念,,可能会帮助到(?) 和昨天的我一样·真·啥也不会 的小白)

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>

/*这是一个先输入同学个数(即链表节点数),再分别输入每个同学名字和分数,最后一起输出的蒟蒻程序*/

struct Node{
        char name[10];
        int score;
        struct Node * next;						//建立结构体——链表的基本单元
    };

int main()
{
    struct Node *p,*h;							//h is short for head(头节点),p 是一直移动的指针,用来进行操作
    int i,n;									//计数用的变量

    scanf("%d",&n);								//链表结点数

    h = malloc ( sizeof ( struct Node ) );		//为链表的头结点分配了空间
    
    scanf("%s", h->name );						//没有看错 没有打错,h->name前没有&
    											//因为name是数组,所以h->name实际上是一个指针,所以不用&来取地址
    scanf("%d", &(h->score) );					//h->score相当于一个int,老老实实取地址

    p=h;
    for(i=1;i<n;i++)
    {
        p->next = malloc (sizeof(struct Node));	//插入新结点别忘了分配空间
        p=p->next;								//指针p移向下一个结点
        scanf("%s",(p->name));					//继续输入数据
        scanf("%d",&(p->score));
    }
    p->next=NULL;								//尾指针设置为为NULL

    p=h;
    while(p)									//当指针不为空
    {
        printf("%s  ",(p->name));				//emm其实这个地方不太明白,好像输出字符型数组的时候
        										//printf(“%s”,数组名) 和 printf("%s",指向数组的指针) 是等效的
        printf("%d\n",p->score);
        p=p->next;
    }
    return 0;
}

样例输入
在这里插入图片描述
样例输出
在这里插入图片描述
——————————————————————

更新:

①可能遇到的问题:

在有些编译器中为链表结点分配空间时,形如
struct node *head = malloc(sizeof(struct node));
的代码编译会报错(如下图)
编译器报错报错

②解决方法:

加一个显示类型转换,改成
struct node *head = (struct node*)malloc(sizeof(struct node));
就OK了~

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值