- 博客(24)
- 资源 (1)
- 收藏
- 关注
原创 坑爹的没有头结点的链表
结论,如果不是一定强制不要家头结点,链表最好加上头结点,不然会出现头结点丢失的情况。非常的麻烦。看下面代码:完成一个没有头结点的链表初始化结构体 struct ListNode { int val; struct ListNode *next;};这个看似简单,但是包含了两层意思,一个是链表,一个是链表的节点。及其容易混淆理解 void pushFromTail(struct ListNode* obj, int val) { //struct ListNode* my
2021-10-24 22:47:04
1508
原创 结构体与链表的一个关键点:头节点
最近在链表上面反复遇到同样的问题,push 和pop的时候顺序不对。一番周折,找到根本原因,对结构体,头节点,指针的基础概念不清晰。先说第一个基本概念。节点的定义结构体必须要定义一个节点。 包含数据域与指针域。struct node{int data;struct node* next// 指针变量。}LNode;//必须要要定义链表的结构体。这里要考虑: 不要的成分为头节点,可选的有:长度,容量,index.等等。最重要的就是头节点的定义。头节点是一个Node类型的节点。 Next 为空。
2021-10-20 09:52:56
518
原创 对列操作的关键点
对队列操作容易错的点:1,进队操作第一步先撞见一个节点,并赋值Node newnode = (node)malloc(sizeof(node));newnode.data = val;newnode.next = null;//尾部插入:先判断是否队列为空if(queue == NULL)({head = newnode;//这个地方比较容易忽略end = newnode;}else{rear.next = newnode;rear = newnode;}2.出对操作:新节
2021-10-19 13:57:32
58
原创 结构体与循环队列
循环队列,是可以循环存储的的顺序队列节点的结构:typedef struct { int size; int front; int rear; int* data;} MyCircularQueue;需要以个Front 和Rear 两个指针。 Rear 用于进队,Front 用于进队。操作方式:创建队列,进队,出队,打印队列,对是否为空,对是否满。清空对,释放对。创建对: Front 与Rear 均为0:MyCircularQueue* myCircularQ
2021-10-17 20:50:14
365
原创 结构体与队列
队列的定义为先进先出,像排队一样。队列的形式: 顺序队列:用数组表达。链式队列,用链表表达。循环队列:用数组表达队列的元素的结构体://Define a nodetypedef struct QuequeNode{ int data; struct QuequeNode* next;}QueueNode;队列本身的数据结构:包含头尾节点以及Size. 规则为尾进头出(方便操作)// Define a Linked Queuetypedef struct LinkQueue
2021-10-17 12:14:12
1893
原创 结构体与栈
栈的顺序为先进后出。栈可以右多种出具结构来表达。第一种:顺序栈,开辟一片连续的区域存储数据:例如静态数组或者动态数组。数组的尾部进行出栈进展的操作。数据结构为Struct stack{int size;int data[maxsize];}可以进行的操作.Create push pop top, getsize, free and getMin.缺点:如果要GetMin的话需要每次都遍历一次,效率比较低。第二,数据长度固定,不可变,会浪费空间,不够灵活。第二种:链式栈:开辟一片不连续的空间
2021-10-16 13:23:41
399
原创 2021-10-11
安全编码:输出函数格式化printf(input) :如果里面有%s%p等特殊符号,就会遇到安全问题printf(“%s”,input) :用%s固定格式。正确使用安全函数包含两部分:正确使用DestMax的值,正确的检查函数返回值。常见问题:过大的目标内容会造成溢出/未检查返回值,会导致异常数据或者恶意行为禁止重新定义安全功能函数以及重新封装安全函数destBuff 为结构体变量是,DestMax必须设置为sizeof(变量名)或者sizeof(结构名称)destbuff 是结构体成
2021-10-11 18:56:11
178
原创 -128的二进制表达式
-128在8位二进制表达式中无法直接表达。看西面的报答0到+127 0000 0000 0111 1111-1 到-127 1000 0001 1111 1111-127 - 1 =-128 保持符号位不变 即为 1000 0000但是-128原码无法表达出来char 是有符号类型, 表示范围为-128到 127.那么如果127 +1 就会出现反转, 1111 1111 +1 符号位不变, 1000 0000即 -128...
2021-10-10 20:00:41
1039
原创 C语言安全编程
c语言很灵活,功能强大,灵活的好处是容易使用,但是不好的地方就是需要注意很多规则来保证代码的鲁棒性。安全编程需要注意的点右:1.避免使用全局变量和静态局部变量,中间过程的值被修改以后,会改变程辉潜在运行的逻辑和功能函数的输出。2.C语言右很多外部输入函数,可以接受外部输入指令。比如Scanf等等。由于C语言的规则,很多特殊的支付会被当做命令符来处理,所以外部输入就容易被利用。所以必须检查外部输入的长度,大小合法性等等3.所有的变量都必须要初始化初值4.尽量使用简单的函数。避免使用功能复杂的函数例如R
2021-10-10 17:26:52
526
原创 Struct对齐在研究:位域与Pack
如果有Pack 对齐规则= min(pack(),sizoef(elementsize))#pragma pack(2)struct TestStruct {short int aa;char bb;};size 为3如果pack(1)那就是4位域:struct TestMtstruct {unsigned aa : 17;unsigned bb : 11;unsigned cc : 15;unsigned dd : 19;unsigned ee : 11;double ff;
2021-10-10 13:18:02
123
原创 C语言数据类型形式转换与隐式转换,以及宏定义
//宏定义:宏定义只能做一级传参,凡是有#或者##的地方,不在进行替换//param:#//#define INT_MAX 0x7fffffff;#define A 3#define _Fun(x,y) (int)(x##e##y)#define Str(x) (#x)#define FUN(x,y) _Fun(x,y)#define SUM(x,y) (x+y)int main(){char* TestChar = Str(hello);printf(“num value is:
2021-10-10 12:25:58
426
原创 c语言的qsort在一位数组,二维数组,结构体以及结构体一级二级多级排序
qsort排序效率快过很多排序算法,而且可以用在各种类型的排序上。下面对每一种类型的排序一一给出例子:1:整型数组排序int intCmp(const void* e1, const void* e2){ return *(int*)e1 - *(int*)e2;//e1..e2强制转成整型指针}2:Float 类型排序int floatCmp(const void* e1, const void* e2){ return *(float*)e1 >= *(float*
2021-10-07 14:19:12
435
原创 二级指针传递二维数组的几种方法
1:第一种方法:直接传递,只是把二维数组的首地址传递进去,在函数内部访问的时候,需要组合重新组成计算行和列void printArrayInFunction(int** arr,int arrSize,int colSize){ printf("testarray = %p\n]", arr); printf("testarray +1 = %p\n]", arr+1); printf("testarray[0][2] = %d\n]", *(arr +2)); prin
2021-10-07 10:36:20
3697
2
原创 C语言结构体实现快速排序
// 架构提定义:struct MyStruct{int begin;int end;}StructArray[3]; //define a struct array length is 3.结构体CMP函数:int structCmp(const void* e1,const void* e2){struct MyStruct* aa = (struct MyStruct*)e1; //强制转换为所定义结构体类型struct MyStruct* bb = (struct MyStruc
2021-10-06 11:38:37
1788
原创 2021-09-14
二维数组与二维指针void inputfunction(){char* ptr[4] = {“abcd”,“efgh”,“eplk”};char* singleTestCharPtr = "qwert";char singleTestCharArray[] = "acbdv";char testcharPtr[][4] = { "abcd","efgh","eplk" };int* singleTestIntPtr;int singleTestIntArray[] = { 13 };
2021-09-14 22:27:07
55
原创 LeetCode 345 字符串处理
这一题属于简单难度的题目,方法的话使用双指针。一个指针从0开始扫描一个指针从末尾开始扫描当前指针大于后指针结束循环。有几个点需要注意:第一要注意元音的大小写,题目里没有写清楚,但是测试用例需要考虑第二:字符串穿的长度要足够大,题目里也没有讲清楚,但是有超长字符串,内存空间分配的不够会导致内存不够的错误代码如下: 总体效率还可以,但是存储空间消耗的有些多#define Max_Len 1000001bool isVovwel(char c){if ((tolower©==‘a’)|| (tol
2021-04-26 09:34:16
82
原创 LeetCode 22括号生成
括号问题一般有两种解法: 一种是通过栈操作,一种是递归。本体是要:数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。本体思路:1:如何穷举所有组合?仔细分析这题可以展开成树给定一个深度,然后求所有的叶子节点的值2:揭发可以用递归的方法,并且记录下来中甲的所有路径,满足条件的为lefft = n and right = n 保留下来,其余的不考虑。具体的代码参考:#define MAX_SIZE 1430void GenerateP(int lef
2021-03-21 16:56:09
39
原创 LeeteCode 6字符串Z型变换
用最原始的方法1.先把字符串转换成N行2维数组,按照规律存入二维数组2.然后对二维数组 遍历,存到目标字符串3:注意素组越界访问和边界值的设定这个方法比较笨。执行的效率不高#define MAX_SIZE 1000char** ConvertToMatrix(char* s,int numRows){ char** strmatrix = (char**)malloc(sizeof(char*) * (numRows+1)); for (int i = 0; i <= numRows
2021-03-21 13:21:15
74
原创 字符串处理之求最长回文字符串leetcode 5
给你一个字符串 s,找到 s 中最长的回文子串。s = a return as = abbad return abba这一题有多种解法,我们先看暴力解法:用滑窗, 双指针 End start 对比如果End -start 之间的字符串是回文就记录下来,且保存下来长度,对比下一个是否长度比已求出的长,如果是,就保存下来,不是就继续。static char tmpstring[1001] = “\0”;static bool flag = false;bool Padlindrome(ch
2021-03-18 00:29:38
71
原创 对称二叉树
一个二叉树判断其是否是堆成二叉树:对称二叉树,就是中间划一刀,左右两边对应的位置是相等的如何判断呢?还是要用到深度搜索,根节点为root. 往下展开问题如果左右节点同时为空,说明时对称的。如果左右节点有一个为空,不管时做还是右,都不是对称树,如果左右的值不相等,也不对称。再往下怎么循环: dfs两个参数,一个时左节点,一个是右节点,那么如何才应该是镜像的呢?那么应该比较左节点的左节点与右节点的右节点,以及左节点的右节点和右节点的左节点进行对比。如果两个都满足,那么说明就是对称的。代码如下boo
2021-03-14 21:19:12
42
原创 树的最大深度和最小深度
最近在练习树相关的算法:第一个树的深度,可以有两种:一个是最大深度一个是最小的深度先看一个最大深度,假设树的结构如下:/************************************struct TreeNode {int val;struct TreeNode *left;struct TreeNode *right;};数据域:val ,指针域分为left and right. . 求树的深度,最典型的解法就是深度搜索,用递归来解决。int Calcula
2021-03-14 20:36:09
525
原创 算法练习
算法:树相关练习1:变量与地址:通过树所里理解到的#最近在刷数据结构中与树相关的题目,遇到一个很有意思的点,记录下来,防止自己忘记:先看下面这一段代码,初始化一个树:定义一段树的结构体:Step1:typedef struct BINARYNNODE {char val;struct BINARYNNODE* lchind;struct BINARYNNODE* rchild;}BinaryNode;这个没有问题,上面是数据域,下面是指针域Step2:初始化树的节点,以及建立树。直
2021-03-14 20:20:16
34
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人