链表(一)【C语言】

写在前面的话: 

  1. 文本编辑器:Sublime Text3
  2. 编译环境:Dev-C++
  3. 本章内容:C语言链表知识、malloc函数

目录

1.安装Sublime Text3

2.了解malloc 

 3.链表

4.总结 (sublime text代码截图)


1.安装Sublime Text3

在开始学习链表之前,先简单的介绍文本编辑器Sublime Text3

点击此处下载编辑器:sublime文本编辑器

 如果下载不了:请关闭防护墙,复制下载链接,即可下载成功!

sublime只是文本编辑工具,要运行你可以找cfree,devC++,Visual Studio等编译器。 

 

设置sublime中文乱码的情况:

1.点击“首选项” - “设置-用户”

 

2.打开文件所在目录

 

3. 右键“Preferences.txt”,点击“属性”

没有找到该文件,你应该将Preferences.sublime-settings复制,粘贴在本文件夹下,改成Preferences.txt

 

 

 4.点击“安全”,图中缺少选择”Users“(组或用户名(G)最后1项),再然后选择“编辑”

 5.允许所有权限

 6.点击”应用“,回到文件夹,以记事本打开它

 7.添加上这一行代码


"font_size": 11.0,

添加的位置(见下图):

8.将原来的Preferences.sublime-settings删除,或者改成另外的名字

然后将Preferences.txt(自己才修改的文件)改成Preferences.sublime-settings,就完成了。

9.效果图

这样不会出现中文乱码了

 

2.了解malloc 

 malloc的全称是memory allocation,中文叫动态分配内存,用于申请一块连续的指定大小的内存块区域以void*类型返回分配的内存区域地址,当无法知道内存具体位置的时候,想要绑定真正的内存空间,就需要用到动态的分配内存,且分配的大小就是程序要求的大小。

如:malloc(100); //表示分配100内存空间大小

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char const *argv[])
{
	
	//申请空间
	void *p = malloc(100);

	/*
		打印分配空间的内存地址
	 */
	printf("内存地址:%p\n",p);

	/*
		分配空间上赋初值
	 */

	int i;
	//在分配的空间中赋值【因为int一个整型变量占4个字节,4 * 25 = 100】
	for(i = 0;i < 25;i++){
		//p还是void*类型,添加int型数据需强转
		*((int*)p+i) = i + 1; 
	}

	/*
		打印输出
	 */
	for(i = 0;i < 25;i++){
		printf("%d ",*((int*)p+i));
	}

	free(p);//分配完空间,需释放资源

	return 0;
}

 

 根据打印结果,我们知道该分配空间在内存地址为:0000 0000 006F 1430(操作系统64位)

 3.链表

链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。

链表节点组成:

  1.  存储数据元素的数据域
  2.  存储下一个节点地址的指针域

链表图解:

#include <stdio.h>
#include <stdlib.h>

struct Node
{
	int n;
	struct Node *next;//保存的下一个节点的地址 
}Node;

int main(int argc, char const *argv[])
{
	struct Node *node1 = malloc(sizeof(struct Node));
	struct Node *node2 = malloc(sizeof(struct Node));

	printf("node1地址:%p\n",node1);
	printf("node2地址:%p\n",node2);
	
	printf("\n");
	
	//将两个节点进行关联起来
	node1->next = node2; 
	printf("node1地址\t%p\n",node1);
	printf("node2地址\t%p\n",node2);
	printf("node1的next地址:%p\n",node1->next);

	free(node1);
	free(node2);
	return 0;
}

由下面的截图我们可以知道,当node1指针域指向node2时,node1.next就是node2的内存地址了。 

 

4.总结 (sublime text代码截图)

 

 

 完

 

 

 

posted @ 2022-04-09 15:42  辰梦starDream  阅读(2)  评论(0编辑  收藏  举报  来源