教授先生带你学习链表:初识链表1

题目描述: 

从键盘输入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);

指针这块不懂得可以点进这个链接看看:

(14条消息) 指针以及二重指针的理解_教授先生的博客-CSDN博客

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值