- 博客(11)
- 收藏
- 关注
原创 C语言数据结构 3.3:链队列和循环队列
队列的概念:队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。链队列:链队列顾名思义就是以链表的结构实现的队列代码:#include <stdio.h>#include <malloc.h>/** * 链队列的节点. */typedef struct LinkNode { int data; LinkNode* next;}*LinkNodePtr;/** * 链队列. */typedef struct L
2022-05-17 22:27:18 258
原创 C语言数据结构 3.2:递归和汉诺塔
概要:递归的基本思想是把打的问题转化为小的问题,因为这些问题的解决方法很多时候是一样的,所以在函数中表现出来就是函数调用它自生的情况,但递归的时间复杂度和空间复杂度比较高,所以有些时候用dp(动态规划)或者贪心算法来代替递归解决问题。递归累加:#include <stdio.h>/** * @brief 使用递归累加 * * @param paraN * * @return 计算结果 */int addTo(int paraN) { int tempSum;
2022-05-12 16:01:35 253
原创 C语言数据结构 3.1 :表达式求值
摘要:表达式求值是栈的一个很重要的应用,由于我没有学过c++,看不懂老师的帖子里的那一份代码,所以自己用c语言实现了一遍,主要运用的思想是将中缀表达式转化为逆波兰表达式,然后再利用栈求逆波兰表达式的值。算法思路:1.将中缀表达式转化为逆波兰表达式:由于逆波兰表达式的转换是一种很经典的算法,百度上的解释比我自己解释的会更好,所以直接引用百度上的算法说明:1、首先构造一个运算符栈,此运算符在栈内遵循越往栈顶优先级越高的原则。2、读入一个用中缀表示的简单算术表达式。3、从左至右扫描该算
2022-05-11 21:05:21 3717 2
原创 C语言数据结构 3:栈和括号匹配
栈:栈是一种操作受限的线性表只允许从一端插入和删除数据。栈有两种存储方式,即线性存储和链接存储(链表)。栈的一个最重要的特征就是栈的插入和删除只能在栈顶进行,所以每次删除的元素都是最后进栈的元素,故栈也被称为后进先出(LIFO)表。每个栈都有一个栈顶指针,它初始值为-1,且总是指向最后一个入栈的元素,栈有两种处理方式,即进栈(push)和出栈(pop)。代码实现:#include <stdio.h>#include <malloc.h>#define STACK_
2022-05-11 20:44:00 536
原创 C语言数据结构 2.5:多项式的加法
摘要:多项式的加法是链表的基本应用,也有助于理解压缩表示。代码:#include <stdio.h>#include <malloc.h>/** * 多项式的一个链表。 */typedef struct LinkNode { int coefficient; int exponent; struct LinkNode *next;} *LinkList, *NodePtr;/** * @brief 创建并初始化链表 * * @return
2022-05-06 12:47:21 1098 1
原创 C语言数据结构 2.4:静态链表
概念:本质上是以数组的性质来储存数据,在结点中设置int类型的next值来表示下一个结点对应的下标,通过下标来访问链表中的元素。静态链表在创建之初就定义好了这个链表的大小,同时这个链表的大小一般不会发生改变,所以在一定程度上相比于动态的链表造成了资源的浪费,比如说创建了十个结点,只存储了五个元素,剩下的结点还是存在且没被利用。由于静态链表是通过数组来存储数据的,所以相比于动态链表来说静态链表的空间是连续分布的,即所有的结点在物理意义上都是相领的。代码:定义与创建:#define D
2022-05-03 02:58:09 482 1
原创 C语言数据结构 2.2&2.3:单链表与双向链表
概念:链表是以链式结构存储数据的,其中的元素在存储器上的位置是任意的,既逻辑上的相邻在屋里位置上不一定相邻。图示:结点:链表:头指针是指向头结点的指针。代码演示:定义链表结点:/** * 定义链表结构体 */typedef struct LinkNode { char data; struct LinkNode *next;} LNode, *LinkList, *NodePtr;创建一个只含有一个节点且没有数据的链表:/*..
2022-04-28 17:20:00 1510 2
原创 C语言数据结构 1:顺序表
C语言数据结构 1:顺序表顺序表是最常用的数据结构.自主完成的代码:/** * 在顺序表中找到给定的数并返回其位置,没有则返回-1 */int locateElement(SequentialListPtr paraListPtr, int paraValue) { for (int i = 0; i < paraListPtr->actualLength; i ++) {//暴力遍历,如果是有序的线性表使用二分查找法 if (paraListPt
2022-04-25 20:49:46 1543
原创 约瑟夫环问题(C语言数组和循环链表)
本文将用两种方式(数组和循环链表)求解约瑟夫环问题,为了更好理解,本文将从洛谷的P1996 约瑟夫问题出发。题目描述nn 个人围成一圈,从第一个人开始报数,数到 mm 的人出列,再由下一个人重新从 11 开始报数,数到 mm 的人再出圈,依次类推,直到所有的人都出圈,请输出依次出圈人的编号。输入格式输入两个整数 n,m。输出格式输出一行 n个整数,按顺序输出每个出圈人的编号。输入输出样例输入10 3输出3 6 9 2 7 1 8 5 10 4说明/提示
2021-12-07 10:58:49 20736 13
原创 LeetCode第75题.颜色分类(C语言对撞指针)
题目详情:给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。示例 1:输入:nums = [2,0,2,1,1,0]输出:[0,0,1,1,2,2]示例 2:输入:nums = [2,0,1]输出:[0,1,2]示例 3:输入:nums = [0]输出:[0]示例 4:输入:nums = [1]输出:[1
2021-12-05 20:45:49 1418 2
原创 LeetCode第19题:删除链表的倒数第N个结点(C语言算法实现)
题目:给你一个链表,删除链表的倒数第n个结点,并返回链表的头结点示例1:输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]示例2:输入:head = [1], n = 1输出:[]示例3:输入:head = [1,2], n = 1输出:[1]提示: 链表中结点的数目为 sz 1 <= sz <= 30 0 <= Node.val <= 100 1 <= n <=
2021-12-05 19:24:23 361 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人