分类: c语言

19 篇文章

排序算法
时间复杂度O(n2)的算法 冒泡排序 冒泡排序是入门级的算法,原理是利用当前值和后值的大小比较,交换位置,每一次循环把没有排序的数据中的最大值移动到未排序部分的最后一个,用冒泡来命名还是很形象的,最大的数据最轻,一步一步上浮到表面,即尾巴。通常有三种写法: 一边比较,一般移动最大值,保证每一轮都能把最大值移动到最后。 第二种写法在第一种的基础上加一…
UNIX基础知识
unix及类unix系统架构 操作系统严格意义上来说是由控制计算机硬件资源,提供程序运行环境的内核及其他软件构成的软件,其他软件包括系统实用程序(system utility)、应用程序、shell及公用函数库。\ 操作系统的体系架构是硬件-内核-(shell,公用函数库,应用程序)。内核的接口就是系统调用,应用程序可以直接进行系统调用,也可以通过…
KMP算法原理和实现-C语言实现
简介 什么是KMP算法?百度百科 KMP 算法是一种改进的字符串匹配算法,由 D.E.Knuth,J.H.Morris 和 V.R.Pratt 提出的,因此人们称它为克努特 — 莫里斯 — 普拉特操作(简称 KMP 算法)。KMP 算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是通过一个 next …
LC160 相交链表
typedef struct ListNode listNode; struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) { listNode *a = headA, *b = headB; while (a != b && (a->…
LC142 环形链表 II
typedef struct listNode { int val; struct listNode *next; } listNode; struct ListNode *detectCycle(struct ListNode *head) { if (head == NULL || head->next == NULL || head->nex…
LC141 环形链表
typedef struct listNode { int val; struct listNode *next; } listNode; bool hasCycle(struct ListNode *head) { if (head == NULL) return false; listNode *fast = head->next, *slow…
LC707 设计链表
typedef struct MyLinkedList { int val; struct MyLinkedList *next; } MyLinkedList; MyLinkedList* myLinkedListCreate() { MyLinkedList *newList = malloc(sizeof(MyLinkedList)); ne…
LC23 合并K个升序链表
struct ListNode { int val; struct ListNode *next; }; struct ListNode *mergeTwoList(struct ListNode *list1, struct ListNode *list2) { struct ListNode *newList; struct ListNode …
LC84 柱状图中最大的矩形
int largestRectangleArea(int* heights, int heightsSize){ int left[100000], right[100000], stack[100000]; int top = -1, max = 0; for (int i = 0; i < heightsSize; i++) { while (…
LC503 下一个更大元素II
int* nextGreaterElements(int* nums, int numsSize, int* returnSize){ int *ret = malloc(sizeof(int) * numsSize); int stack[numsSize]; int top = -1; for (int i = 0; i < numsSize …