题目描述:
从键盘输入3个整数表示3位同学得成绩,假设分数在0--100之间,输出这三个同学的分数,数据间以空格间隔,最后一个数据的后面也有空格。
输入样例
70 80 90
输出样例
70 80 90
#include<iostream>
#include<stdlib.h> //使用malloc要使用的头文件
//可以分为4个部分:建立结构体 ,建立链表,演示,主函数
using namespace std;
//建立结构体
struct node{
int data;//数据内容
node* next;//指向下一结点
};
void build(node* head)
{
node*p=head,*q;//先建立2个结构体指针,再把head地址赋给p
for(int i=1;i<=3;++i)
{
q= new node;//重新建立一个新的结构体
scanf("%d",&q->data);//存储数据 或者*(q).data q->next(*q).next
p->next=q;//连接,使head的指针指向下一个结构体首地址
p=q; //把q的首地址赋给p,为了形成一个循环,能够像链表一样连续存储数据使用
}//当i为2时,q又开辟一个新的结构体,又重复输入数据,重新形成循环
p->next=NULL;//最后一个结构体指针指向为空
}
void show (node*head)
{
while(head->next!=NULL)//当结构体指针不为空时执行下列循环
{
head=head->next;//连续指向,把下一个结构体地址赋给head后,data1---->变成data2
printf("%d ",head->data);
}
printf("\n");
}
int main()
{
node*head;//head是一个结构体指针
//head=(node*)malloc(sizeof(node));//给指针分配内存空间,要调用头文件#include<stdlib.h> ,c语言就写这句话,c++就写下面那句话
head=new node;//c++ ,new 和 malloc函数都是分配指针动态内存,前者用于c++,后者c语言,是等价的
build(head);
show(head);
}
如果想实现输入一个n,再输入n个数字,再输出这n个数字,用链表的形式,稍微做一些小的改动即可。
#include<iostream>
#include<stdlib.h>
using namespace std;
int n;
struct node{
int data;//数据
node* next;//指向下一结点
};
void build(node* head)
{
node*p=head,*q;
for(int i=1;i<=n;++i)
{
q= new node;
scanf("%d",&q->data);//或者*(q).data q->next(*q).next
p->next=q;//连接
p=q;
}
p->next=NULL;
}
void show (node*head)
{
while(head->next!=NULL)
{
head=head->next;
printf("%d ",head->data);
}
printf("\n");
}
int main()
{
node*head;
head=(node*)malloc(sizeof(node));//c语言 #include<stdlib.h>
head=new node;//c++
scanf("%d",&n);
build(head);
show(head);
}
资料补充:
1.malloc和new
new返回指定类型的指针,并且可以自动计算所需要的大小。
int *p;
p = new int;//返回类型为int* ,分配的大小是sizeof(int)
p = new int[100];//返回类型是int*类型,分配的大小为sizeof(int)*100
而malloc需要我们自己计算字节数,并且返回的时候要强转成指定类型的指针。
int *p;
p = (int *)malloc(sizeof(int));
2,malloc函数返回值
如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。
malloc函数使用注意事项
malloc函数的返回的是无类型指针,在使用时一定要强制转换为所需要的类型。
**(敲黑板)重点:在使用malloc开辟空间时,使用完成一定要释放空间,如果不释放会造内存泄漏。
在使用malloc函数开辟的空间中,不要进行指针的移动,因为一旦移动之后可能出现申请的空间和释放空间大小的不匹配
malloc函数使用形式
关于malloc所开辟空间类型:malloc只开辟空间,不进行类型检查,只是在使用的时候进行类型的强转。
举个例子:‘我’开辟你所需要大小的字节大小空间,至于怎么使用是你的事
mallo函数返回的实际是一个无类型指针,必须在其前面加上指针类型强制转换才可以使用
指针自身 = (指针类型*)malloc(sizeof(指针类型)*数据数量)
int *p = NULL;
int n = 10;
p = (int *)malloc(sizeof(int)*n);
指针这块不懂得可以点进这个链接看看: