初识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了~

猜你喜欢

转载自blog.csdn.net/qq_43467698/article/details/88535552