英语+C语言:3.24

发布于:2025-03-30 ⋅ 阅读:(18) ⋅ 点赞:(0)

一、8.3:结构体指针与typedef的应用

二、8.4:C++引用

引用修改指针变量:

注意:引用必须与变量名紧挨着。

改为纯C语言的二级指针如下:

三、8.5:C++引用案例实战

结构体的存储与其他变量相同,若是malloc则是在堆中,其余则在栈中;

用malloc申请的结构体分布如下:

num与score存储在堆区;

C语言中期阶段

一、9.3:逻辑结构与存储结构

逻辑结构:树、图、线性表、集合

存储结构:顺序存储+链式存储

链式存储的数据结构定义代码:

typedef struct LinkNode
{
	int data;
	LinkNode* next;
}LinkN,*LinkList;

LinkList L = new LinkNode();

二、9.4:算法的基本概念与时间复杂度

1、算法的五个基本特性:有穷、确定、可行、输入、输出

有穷:算法必须在有限的步骤内结束,不能陷入无限循环;

确定:算法的每一步必须是确定的,而不能有歧义;

可行:必须用已有的基本操作实现算法

2、O是同阶

时间复杂度的对比:

三、历年真题中求解时间复杂度

平均复杂度:各种输入等概率下的期望时间复杂度

时间复杂度的类型总结:

对于递增相加的i、j、k,直接相乘每一层循环即可;

类型1的两种情况均为O(n3);

1、2022年(未掌握):选B

2、2019年:掌握

3、2017年:未掌握,纠错在相册

4、2011年与2012年(均掌握):

5、2014年:掌握

6、2025年真题

选B,简单

四、空间复杂度

空间复杂度包括:算法的空间复杂度与数据结构的空间复杂度,算法的空间复杂度是O(1),只需关注数据结构即可。

1、函数递归调用带来的内存开销:

情况1:O(n)

情况2:

五、线性表中的涉及的真题

1、2010顺序表

#include<iostream>
using namespace std;
int main()
{
	int n;
	cin >> n;
	int* R = new int[n];
	for (int i = 0; i < n; i++)
	{
		R[i] = i;
	}

	int* Q = new int[n];
	int p;
	cin >> p;
	int j = 0;

	for (int i = p; i < n; i++)
	{
		Q[j] = R[i];
		j++;
	}
	for (int i = 0; i < p; i++)
	{
		Q[j] = R[i];
		j++;
	}
	for (int i = 0; i < n; i++)
	{
		cout << Q[i] << ' ';
	}
}

时间复杂度:O(n)       空间复杂度:O(n)

2、

六、10.2:线性表的顺序表示原理解析

1、概念

相同类型元素、元素个数有限、唯一前驱与后继、逻辑结构

2、存储类型->线性表的顺序表示,顺序表

(1)概念:逻辑上相邻的元素物理上也相邻

(2)插入

判断插入位置是否合法:0≤i≤len

插入与删除的时间复杂度均为O(n)

3、真题

2023选择题:有一个小坑,查找有两种:顺序查找与折半查找,顺序查找是O(n),折半查找是O(logN);
所以选项A的最短时间是O(logN)

七、10.5:线性表的链式存储

1、数据结构定义

typedef struct
{
	int data;
	LinkNode* next;
}LinkNode,*Linklist;

Linklist LK = new LinkNode();

注意:链表最后一个节点的next值为NULL且要自行定义一个头节点

看题干怎么描述的吧:

八、头插法新建链表实战

​
#include<iostream>
using namespace std;

typedef struct LinkNode
{
	int data;
	LinkNode* next;
}LinkNode,*LinkList;


//要用引用,因为申请了头节点,所以不用单独处理第一个节点
void LHeadInsert(LinkList &L)
{
	//为头节点申请空间
	L = new LinkNode();
	L->next = NULL;
	int x; 
	cin >> x;
	
	//开启while循环
	while (x != 9999)
	{
		LinkList q = new LinkNode();
		q->data = x;
		q->next = L->next;
		L->next = q;
		cin >> x;
	}
}

//打印出来
void  printList(LinkList& L)
{
	LinkList q;
	q = L->next;
	while (q)
	{
		cout << q->data << endl;
		q = q->next;
	}
}


int main()
{
	//定义头节点
	LinkList L;
	
	//输入数据为3,4,5,6,7,9999
	LHeadInsert(L);

	//输出
	printList(L);
}

​