自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 收藏
  • 关注

原创 堆的基本操作

Heap.h#ifndef __Heap_H_#define __Heap_H_//定义一个函数指针//typedef int (*PF)(HDataType left, HDataType right);typedef int HDataType;typedef struct Heap{ HDataType* _array; int _capacity;//容量 i...

2018-11-29 20:50:53 133

原创 在一组数字中找出最大和第二大的两个数

题目:在一组数字中找出最大和第二大的两个数要求:只能遍历一次数组思路:定义两个变量max和second,#include<stdio.h>#include<stdlib.h>void Find_Two_MaxNum(int a[], int size, int*max,int *second){ for (int i = 0; i < size...

2018-11-28 16:50:59 4046

原创 20. 有效的括号

给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: "()"输出: true示例 2:输入: "()[]{}"输出: true示例 3:输入: "(]"输出: false...

2018-11-23 23:21:19 105

原创

Stack.h#pragma once#define N 3typedef int SDataType;//动态栈typedef struct Stack{ SDataType*_array; int _capacity;//有效元素的最大个数 int _top;//栈顶}Stack;void StackInit(Stack*ps);//栈的初始化void _Che...

2018-11-23 22:49:58 83

原创 203. 移除链表元素

删除链表中等于给定值 val 的所有节点。示例:输入: 1->2->6->3->4->5->6, val = 6输出: 1->2->3->4->5代码:/** * Definition for singly-linked list. * struct ListNode { * int val; * ...

2018-11-23 21:04:51 142

原创 最小栈

设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。push(x) -- 将元素 x 推入栈中。 pop() -- 删除栈顶的元素。 top() -- 获取栈顶元素。 getMin() -- 检索栈中的最小元素。示例:MinStack minStack = new MinStack();minStack.push(-2);minStack.pus...

2018-11-23 20:13:29 273

原创 带头结点的双向循环链表

DList.h#ifndef __DList_H_#define __DList_H_typedef int DataType;typedef struct DListNode{ DataType _data; struct DListNode* _pPre; struct DListNode* _pNext;}DListNode;DListNode*BuyDLis...

2018-11-22 16:01:02 397

原创 206. 反转链表

反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题?代码:/** * Definition for singly-linked list. * struct ListNode { *...

2018-11-16 23:37:55 139

原创 指针相关知识点总结(二)

一、字符指针重点:区别字符指针和字符数组的本质#include<stdio.h>#include<stdlib.h>int main(){ char str1[] = "hello"; char str2[] = "hello"; char*p1 = "hello"; char*p2 = "hello"; printf("str

2018-11-16 22:58:22 409

原创 单链表

SList.h#ifndef __SLIST_H__#define __SLIST_H__typedef int SLDataType;typedef struct SListNode{ SLDataType _data; struct SListNode*_pNext;}SListNode;void SListInit(SListNode*pList);//初始化v...

2018-11-16 20:15:27 125

原创 链表中倒数第k个结点

题目描述输入一个链表,输出该链表中倒数第k个结点。分析:整体思路:“快慢指针”法设立快慢两个指针,先让快指针走k步,到达位置后,快慢指针再同步移动;当快指针走到NULL时,慢指针所在的位置即为倒数第k个节点主要注意的点:k>节点个数时,最开始fast指针前进k步while循环内一定要判断,fast已经走到NULL时,没必要继续走下去代码:/*struct Li...

2018-11-15 15:49:56 135 1

原创 动态顺序表

我们对静态顺序表可能比较熟悉,它的定义方式是struct SeqList{ int arr[100]; int _size;//当前存放数据的个数};主要思想就是利用数组可以一次性开辟一整块空间,存放我们想要的数据。从这个结构体的定义,我们可以获得如下信息:开辟的空间大小为100,(即可以存放100个整型数据),_size记录了当前数组中有效元素的个数,为什么要有这一...

2018-11-12 20:10:40 415

原创 模拟实现memcpy函数

  代码:#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>#include<assert.h>void*Memcpy(void*dest, const void*src, size_t count){ assert(dest); assert(sr...

2018-11-11 00:31:31 186

原创 模拟实现strchr函数

代码:#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>#include<string.h>#include<assert.h>char*Strchr(const char*str, int ch){ assert(str); char*pst...

2018-11-11 00:26:11 152

原创 模拟实现memmove函数

代码:#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>#include<assert.h>void*Memmove(void*dest, const void*src, int num){ assert(dest); assert(src); char*...

2018-11-10 23:19:46 114

原创 动态顺序表

SeqList.h#pragma oncetypedef int DataType;typedef struct SeqList{ DataType*_pData; int _capacity;//容量 int _size;//有效元素的个数}SeqList;void SeqListInit(SeqList*pSeq,int capacity);//初始化顺序表void...

2018-11-10 19:37:06 220

原创 模拟实现strcpy

代码:#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>#include<assert.h>char*Strcpy(char*dest, const char*src){ assert(src); assert(dest); char*start = de...

2018-11-09 00:08:39 126

原创 模拟实现strcat函数

 代码:#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>#include<string.h>#include<assert.h>char*Strcat(char*dest, const char*src){ assert(dest); ...

2018-11-08 23:54:15 130

原创 喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水, 给20元,可以喝多少汽水

题目:喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,  给20元,可以喝多少汽水代码:#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>int main(){ int money = 0; scanf("%d", &money); int empty = m...

2018-11-08 23:52:50 326

原创 一个数组中只有两个数字是出现一次, 其他所有数字都出现了两次。 找出这两个数字,编程实现

题目:一个数组中只有两个数字是出现一次, 其他所有数字都出现了两次。 找出这两个数字,编程实现思路一:暴力求解。每次选取一个元素,再遍历数组,判断是否有与其相同的元素,如果有则跳出循环;每一轮遍历都结束后都可以根据j与size的大小判断出只出现一次的数字代码:#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#incl...

2018-11-08 23:43:51 565

原创 判断一个字符串是否为另外一个字符串旋转之后的字符串。 例如:给定s1 =AABCD和s2 = BCDAA,返回1,给定s1=abcd和s2=ACBD,返回0.

题目: 判断一个字符串是否为另外一个字符串旋转之后的字符串。 例如:给定s1 =AABCD和s2 = BCDAA,返回1,给定s1=abcd和s2=ACBD,返回0. AABCD左旋一个字符得到ABCDA AABCD左旋两个字符得到BCDAA AABCD右旋一个字符得到DAABC 思路:把源字符串追加到源字符串后边,这样问题就转化成了查找字串。可以利用strstr函数来完成,但...

2018-11-07 00:13:38 372

原创 模拟实现strstr函数

推荐一篇讲解KMP算法的文章--阮一峰http://www.ruanyifeng.com/blog/2013/05/Knuth–Morris–Pratt_algorithm.html推荐一篇讲解Boyer-Moore算法的文章--阮一峰http://www.ruanyifeng.com/blog/2013/05/boyer-moore_string_search_algorithm.html...

2018-11-06 16:20:14 7626 2

原创 .实现一个函数,可以左旋字符串中的k个字符。 ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB

题目:实现一个函数,可以左旋字符串中的k个字符。 ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB 思路一:“数组挪动”,比如ABCD左旋一个字符,我们可以先把首元素保存起来,然后其他元素依次向左挪一个位置,这样最后一个字符(这里不谈\0,指的是D)的位置就空出来了,再把之前保存的那个字符放到这个位置,就成了BCDA。左旋2个字符同理,只不过多一层循环。这种方法时间复...

2018-11-05 16:15:28 267

原创 模拟实现strcmp函数

strcmpint strcmp ( const char * str1, const char * str2 );Compare two stringsCompares the C string str1 to the C string str2.This function starts comparing the first character of each string. ...

2018-11-04 19:40:16 218

原创 //杨氏矩阵 有一个二维数组. 数组的每行从左到右是递增的,每列从上到下是递增的. 在这样的数组中查找一个数字是否存在

题目://杨氏矩阵 有一个二维数组. 数组的每行从左到右是递增的,每列从上到下是递增的. 在这样的数组中查找一个数字是否存在。 时间复杂度小于O(N); 数组: 1 2 3 2 3 4 3 4 5 1 3 4 2 4 5 4 5 6分析:拿到这个题一开始的思路就是暴力解法,直接两个嵌套的for循环遍历二维数组,但是这样的时间复杂度就是O^2(n),题目要求的时间复杂度...

2018-11-03 20:04:23 432

原创 调整数组使奇数全部都位于偶数前面

题目:输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分分析:分别定义左右两个指针,一个从前向后找偶数,找到第一个偶数就停下来;同理,另一个从后向前找奇数,找到第一个奇数就停下来,然后把两个数据进行交换。依次循环,直到两个指针相遇。本题要注意的几个关键点:本题的大循环条件肯定是left<right,但是依...

2018-11-03 17:39:45 542

原创 .编程实现: 一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。 请找出这个数字。(使用位运算)

题目:编程实现: 一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。 请找出这个数字。(使用位运算) 代码:#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>//思路:将所有数字全部异或,最后得到的值即为只出现一次的数字int Find_one_num...

2018-11-03 10:36:46 222

原创 不使用(a+b)/2这种方式,求两个数的平均值

题目:不使用(a+b)/2这种方式,求两个数的平均值分析:采用位运算的方法(图解如下)代码:#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>int Average(int num1, int num2){ return num1 + ((num2 - num1...

2018-11-03 10:22:56 133

原创 有一个字符数组的内容为:"student a am i", 请你将数组的内容改为"i am a student".

题目:有一个字符数组的内容为:"student a am i", 请你将数组的内容改为"i am a student". 要求: 不能使用库函数。 只能开辟有限个空间(空间个数和字符串的长度无关)。 student a am i i ma a tneduts i am a student 思路:再定义一个数组,把原数组的字符串倒着拷入目标数组(相当于源字符串逆过来),然后操作目...

2018-11-02 23:37:12 287

原创 .编写函数: unsigned int reverse_bit(unsigned int value); 这个函数的返回值value的二进制位模式从左到右翻转后的值。

题目:编写函数: unsigned int reverse_bit(unsigned int value); 这个函数的返回值value的二进制位模式从左到右翻转后的值。 如: 在32位机器上25这个值包含下列各位: 00000000000000000000000000011001 翻转后:(2550136832) 10011000000000000000000000000000 ...

2018-11-02 20:43:32 331

原创 扫雷

代码:#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<string.h>#include<time.h>//扫雷游戏的实现#define ROW 9#define COL 9#define Mine_Count 30//定...

2018-11-02 10:04:09 203

原创 三字棋

三子棋是五子棋的简化版,原理和五子棋一样#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>#define ROW 3#define COL 3//1.定义棋盘:二维数组//2.初始化棋盘//3.先打印一下棋盘//4.用户下一步棋,顺便检查一下游戏是否结束//5.电...

2018-11-02 09:56:17 553

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除