从零开始的链表之旅【上】(基本知识点)

从零开始的链表之旅

链表涉及到许多知识点,初学者往往摸不着头脑,本文从链表所涉及到的基础知识开始讲起,力图简单易懂,希望读者有所收获。

一、malloc函数
1.malloc函数的参数是需要分配的字节数,一般规范化写为sizeof(需要分配的数据类型)
2.malloc函数的返回值是分配好的内存的首地址
3.例:

int *pi=(int *)malloc(sizeof(int));  //分配4个字节的整型数据内存 
*pi=4;
cout<<*pi<<endl; 
char *ch=(char *)malloc(sizeof(char)); //分配1个字节的整型数据内存 
*ch='B';
cout<<*ch<<endl; 

二、结构体与结构指针:
1)结构指针:
结构指针是指向结构体变量的指针,如:
struct STUDENT stu;//定义结构体变量stu
struct STUDENT *stu_p=&stu; 这里定义了一个结构指针stu_p,指向结构体变量stu

2)利用结构指针来访问结构体变量的成员有两种方式:
1.(*结构指针变量名).成员名 如(*stu_p).age
2.结构指针变量名->成员名 如stu_p->age
3.

例:
struct STUDENT
{
	int age;
	char name[10];
};
	struct STUDENT stu;
	stu.age=20;
	strcpy(stu.name,"刘婷");
	struct STUDENT *stu_p=&stu;
	cout<<stu.age<<" "<<stu_p->age<<" "<<(*stu_p).age<<endl;
	cout<<stu.name<<" "<<stu_p->name<<" "<<(*stu_p).name<<endl;

三、typedef关键字
typedef关键字的作用是给数据类型取别名,格式为typedef 数据类型 自定义别名; 例如:typedef int ABC; ABC n=5;第二句ABC就相当于int。
特殊情况:
typedef struct STUDENT
{
int age;
char name[10];
}stu;
一般typedef用于给已有数据类型取别名,但在这里是定义结构体和取别名同时进行。

四、链表的概念
这里我不准备学术地讲什么链式存储、线性表,请大家看下面这幅图
在这里插入图片描述
图中的head是一个结构指针,指向第一个节点,每个节点都是一个结构体变量,变量中有两个成员,一个是存放的数据,另一个是一个结构指针指向下一个结构体变量,最后一个结构体变量的结构指针指向NULL。
接下来我们写一个简单的链表,head指针指向一个节点,这个节点存放的数据是10,这个节点的结构指针直接指向NULL。
如图:
在这里插入图片描述

#include <bits/stdc++.h>
using namespace std;
struct node			//每个节点是struct node类型的结构体 
{
	int data;
	struct node *next;
};
struct node* create_list(int a)     //定义一个函数,返回值为指向节点的结构指针,参数为要插入到节点的整数 
{
	struct node *head=(struct node *)malloc(sizeof(struct node)); 
	//malloc一片大小为一个节点的内存,头指针指向这片内存   
	head->data=a;//令节点的数据域为参数a 
	head->next=NULL;//令指针的下一个节点为空,即链表中只有一个节点。 
	return head;
}
int main()
{
	struct node *p=create_list(10);
	cout<<p->data<<endl;//程序最终输出10
	return 0;
}

如果仍然存在疑问,推荐阅读:
1.链表及创建(来自C语言中文网)
2.一步一步教你从零开始写C语言链表(来自博客园)

发布了61 篇原创文章 · 获赞 1 · 访问量 1372

猜你喜欢

转载自blog.csdn.net/qq_42622433/article/details/104114706