malloc-C语言动态链表建立问题

问题描述

C语言动态链表建立问题

#include
#include
#define LEN sizeof(struct Student)

int n = 0;//记录数据的个数

struct Student
{
    int number;
    int score;
    struct Student *next;
};

int main()
{
    struct Student *creat(void);
    void print(struct Student *p);
    struct Student *p;
    p = creat();
    print(p);
    return 0;
}

struct Student *creat(void)
{
    struct Student *p1,*p2;
    struct Student *head = NULL;
    p1 = p2 = (struct Student *)malloc(LEN);
    printf("please enter Students' informations(number & score:)");
    scanf("%d %d",&p1->number,&p1->score);//get
    while(p1->number != 0)
    {
        n += 1;
        if(n==1)head = p1;
        else p2->next = p1;
        p2 = p1;
        printf("please enter Students' informations(number &score):");
        scanf("%d %d",p1->number,p1->score);
        p1 = (struct Student*)malloc(LEN);

    }
   p2->next = NULL;
   return (head);
};

void print(struct Student *p)
{
    printf("their informations as follows:n");
    while(p->number!=0)
    {
        printf("%d %d",p->number,p->score);
        p = p->next;
    }
}

代码如上,运行后输入第二个数据后显示“该内存不能为written”,用的是CODEBLOCKS。卡在这一天了,求解答,万分感谢~

解决方案

while(p1->number != 0) { n += 1; if(n==1)head = p1; else p2->next = p1; p2 = p1; printf("please enter Students' informations(number &score):"); scanf("%d %d",p1->number,p1->score); p1 = (struct Student*)malloc(LEN); }

检查这里的scanf函数

解决方案二:

你定义的create函数怎么是个指针?

解决方案三:

 #define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define LEN sizeof(struct Student)
int n = 0;//记录数据的个数
struct Student
{
    int number;
    int score;
    struct Student *next;
};

int main()
{
    struct Student *creat(void);
    void print(struct Student *p);
    struct Student *p;
    p = creat();
    print(p);
    return 0;
}

struct Student *creat(void)
{
    struct Student *p1, *p2;
    struct Student *head = NULL;
    p1 = p2 = (struct Student *)malloc(LEN);
    printf("please enter Students' informations(number & score:)");
    scanf("%d %d", &p1->number, &p1->score);//get
    while (p1->number != 0)
    {
        n += 1;
        if (n == 1)
            head = p1;
        else
            p2->next = p1;
        p2 = p1;
        printf("please enter Students' informations(number &score):");
        p1 = (struct Student*)malloc(LEN);
        scanf("%d %d", &p1->number, &p1->score);

    }
    p2->next = NULL;
    return (head);
};

void print(struct Student *p)
{
    printf("their informations as follows:n");
    while (p!= NULL)
    {
        printf("%d %dn", p->number, p->score);
        p = p->next;
    }
}

解决方案四:

1:

  p1 = (struct Student*)malloc(LEN);
        scanf("%d %d", &p1->number, &p1->score);

2:

  while (p!= NULL)
    {
        printf("%d %dn", p->number, p->score);
        p = p->next;
    }
时间: 2024-11-03 09:49:22

malloc-C语言动态链表建立问题的相关文章

还在学习阶段-C语言动态链表写入文件

问题描述 C语言动态链表写入文件 struct Txl { char name[20]; long long tel; struct Txl *next; }; int n; struct Txl creat(void) { struct Txl *p1,*p2,*head; n=0; p1=p2=(struct Txl)malloc(LEN); memset(p1,0,sizeof(LEN)); memset(p2,0,sizeof(LEN)); printf("姓名t"); sca

C语言创建链表错误之通过指针参数申请动态内存实例分析_C 语言

本文实例讲述了C语言创建链表中经典错误的通过指针参数申请动态内存,分享给大家供大家参考之用.具体实例如下: #include <stdio.h> #include <stdlib.h>// 用malloc要包含这个头文件 typedef struct node { int data; struct node* next;// 这个地方注意结构体变量的定义规则 } Node; void createLinklist(Node* pHder, int length) { int i =

C语言静态链表和动态链表_C 语言

1. 静态链表 结构体中的成员可以是各种类型的指针变量,当一个结构体中有一个或多个成员的基类型是本结构体类型时,则称这种结构体为"引用自身的结构体".如: struct link { char ch; struct link *p; } a; p是一个可以指向 struct link 类型变量的指针成员.因此,a.p = &a 是合法的表达式,由此构成的存储结构如图1所示. 图1 引用自身的结构体 例1 一个简单的链表 #include <stdio.h> stru

C++第2周项目4——动态链表初试

课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565,本周题目链接:http://blog.csdn.net/sxhelijian/article/details/8635385 [项目4-动态链表初试]数据依然来自score.txt,在程序中建立一个动态链表:每读入一个同学的数据,计算总分,分配结点的存储空间并赋值,并建立起前后相链的关系.在建立链表的同时,要进行统计,以便于求出所有同学总分的平均成绩.动态链表建立后,从头

c语言-链表建立头插法链头乱码

问题描述 链表建立头插法链头乱码 我用简单的 链头插入法建立链表但链头里的内容是乱码 怎么回事 解决方案 值域没有赋值,或者结构体没有初始化

C语言之链表

这两天在复习C语言的知识,为了给下个阶段学习OC做准备,以下的代码的编译运行环境是Xcode5.0版本,写篇博文把昨天复习的C语言有关链表的知识给大家分享一下,以下是小菜自己总结的内容,代码也是按照自己的思路所编写的,有不足之处还请大牛们批评指教. 确切的说链表属于数据结构中线性表中的内容,在链表中存储的内容是按线性排列的,就像是一条线把所要存的数据串起来,可以把链表类比成一串珠子,数据就是一个个的珠子,数据间的next指针就相当于穿珠子的线. 链表操作的时间复杂度: 往链表中插入数据的时间复杂

C语言单向链表的表示与实现实例详解_C 语言

1.概述: C语言中的单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始. 链表中最简单的一种是单向链表,它包含两个域,一个信息域和一个指针域.这个链接指向列表中的下一个节点,而最后一个节点则指向一个空值. 如下图所示: 一个单向链表包含两个值: 当前节点的值和一个指向下一个节点的链接 一个单向链表的节点被分成两个部分.第一个部分保存或者显示关于节点的信息,第二个部分存储下一个节点的地址.单向链表只可向一个方向遍历. 链表最基本的结构是在每个节点

C语言单链表的实现_C 语言

单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素. 链表结构: SList.h #pragma once typedef int DataType; typedef struct SListNode { DataType data; struct SListNode* next; }SListNode; // 如果要修改链表就必须加引用 SListNode* _BuyNode(DataType x); //建立节点 void PrintSlist(SListNode

C语言单链表常见操作汇总_C 语言

C语言的单链表是常用的数据结构之一,本文总结了单链表的常见操作,实例如下: #include<stdio.h> #include<stdlib.h> //定义单链表结构体 typedef int ElemType; typedef struct Node { ElemType data; struct Node *next; }LNode,*LinkList; //创建单链表 void Build(LinkList L) { int n; LinkList p,q; p=L; pr