【数据结构】【C语言】 链表知识点+笔记

1. 内存4区

代码区:函数代码,存放在代码区,函数名就是这个函数的地址
全局区:全局的变量,字符串常量
栈区:系统开辟和释放
堆区:用户决定要开辟多大内存?装什么数据?使用完后还要不要继续使用? 用户自己需要决定开辟和释放

内存示意图:
在这里插入图片描述

#include<stdlib.h>
		Int *p;
		P=(int *)molloc(size);
		//在堆区开辟size个字节的内存
		//指针p指向这段内存
		//用molloc去开辟的内存不会自动释放,需要手动释放
		Free(p) //释放

Ps:

#include<stdlib.h> 		//动态内存分配头文件
molloc(size) 			//函数功能是开辟内存,在堆区中开辟size个字节的内存
molloc(6) 				//开辟6个字节的内存
molloc(sizeof(int)) 	//开辟4个字节的内存
(float *)molloc(4) 		//开辟4个字节的内存给(float *)类型的数据

2.链表
结点:每一个结点就是一块内存
数据:每一个结点里面存放数据

简单单链表实现代码:

#include<stdio.h>
#include<stdlib.h>
struct Node
{
	int data;						//数据域
	struct Node* next;			//指针域
};
struct Node* createList()
{
	struct Node* headNode = (struct Node*)malloc(sizeof(struct Node));
	//headNode成为了结构体变量
	//变量使用前必须初始化
	//headNode->data=1
	headNode->next = NULL;
	return headNode;
}
//创建结点
struct Node* createNode(int data)
{
	struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
	newNode->data = data;
	newNode->next = NULL;
	return newNode;
}
//打印链表
void printfList(struct Node* headNode)
{
	struct Node* pMove = headNode->next;
	while (pMove)
	{
		printf("%d",pMove->data);
		pMove = pMove->next;
	}
	printf("\n");
}
//插入结点
void insertNodeByHead(struct Node* headNode,int data)
{
	//创建插入的结点
	struct Node* newNode = createNode(data);
	newNode->next = headNode->next;
	headNode->next = newNode;
}
//删除结点
void deleteNodeByAppoin(struct Node* headNode,int posData)
{
	struct Node* posNode = headNode->next;
	struct Node* posNodeFront = headNode;
	if (posNode == NULL)
	{
		printf("无法删除链表不为空!");
	}
	while (posNode->data != posData)
	{
		posNodeFront = posNode;
		posNode = posNode->next;
		if (posNode == NULL)
		{
			printf("无法找到相关信息!无法删除!");
			break;
		}
	}
	posNodeFront->next = posNode->next;
	free(posNode);
}
int main()
{
	struct Node* list = createList();
	insertNodeByHead(list, 1);
	insertNodeByHead(list, 2);
	insertNodeByHead(list, 3);
	printfList(list);
	deleteNodeByAppoin(list, 2);
	printfList(list);
	system("pause");
	return 0;
}

具体视频教程:C语言单链表教程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值