
日常练习
文章平均质量分 63
猫呢被鱼吃了吗
这个作者很懒,什么都没留下…
展开
-
生产者消费者模型和读者写者模型的实现
生产者消费者模型和读者写者模型使我们常见的关于线程同步与互斥有关的模型,它们的实现对理解线程同步互斥有很好的帮助。生产者消费者模型如上图,生产者生产一个产品并放到仓库中,消费者从仓库中取产品,生产和消费者两个动作是互斥的,而生产者和生产者,消费者和消费者之间是同步的。具体代码实现如下:#include <stdio.h> ...原创 2018-05-28 12:12:57 · 357 阅读 · 1 评论 -
数据结构之二叉搜索树的实现
二叉搜索树二叉搜索树的定义二叉搜索树又被称为二叉排序树,它或者是一颗空树,或者是具备以下性质的二叉树若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树二叉搜索树的操作它属于二叉树,所以它的初始化和创建销毁都和二叉树相同,不同的主要就是插入,查找和删除。插入 在...原创 2018-05-28 11:58:45 · 222 阅读 · 0 评论 -
练习
题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。思路:因为该数字超过了数组的长度的一半,因此该数在数组出现的次数都超过了其他所有数字出现次数之和,所以我们可以使用下面这个算法来求解。算法:初始化一个数组arr,并求出该...原创 2018-05-27 11:34:19 · 197 阅读 · 0 评论 -
C语言实现堆
堆的概念如果有一个关键码集合K={K0,K1,…,Kn-1},把它的所有元素按完全二叉树的顺序存储方式存储在一个数组中,并满足: Ki <= K2*i + 1且Ki <= K2*i + 2(Ki < K2*i + 1且Ki >= K2*i + 2)i = 0,1,2,…,则称为大堆(或小堆)。通俗点说,堆就是一个任意节点都小于(或大于)其左右孩子节点的一个二叉树。...原创 2018-05-21 10:34:25 · 10938 阅读 · 1 评论 -
C实现迷宫问题
迷宫问题分析 用二维码创建一个m*n的迷宫地图,1表示通路,0表示障碍,从迷宫中寻找出路。迷宫问题大致有三种情况实现:使用递归和非递归方法实现简单的迷宫问题如果迷宫有多条出路,求最短出路针对复杂迷宫问题寻找最短出路下面对其依次进行分析:1、使用递归和非递归方法实现简单的迷宫问题 这里的简单迷宫问题就是只有一条出路,且出路不带环,实现它的主要思路就是应用回溯的思想...原创 2018-05-04 13:09:33 · 507 阅读 · 0 评论 -
栈和队列面试题
一、最小栈 最小栈其实和栈没有什么区别的,唯一的区别在于最小栈是可以在O(1)时间内得到当前的栈空间里,最小的值。解决这个问题提供两种方法: Round1: 创建一个辅助栈,比较当前元素和辅助元素栈顶元素的大小 ...原创 2018-04-26 08:20:56 · 326 阅读 · 0 评论 -
二叉树实现及面试题
原创 2018-05-10 10:02:13 · 231 阅读 · 0 评论 -
Linux文件系统
在Linux下,我们要查看文件信息可以使用ls -l命令[rlh@localhost ~]$ ls -l总用量 14440drwxr-xr-x. 2 root root 25 4月 17 21:42 bitdrwxr-xr-x. 2 rlh rlh 6 3月 29 22:02 Desktopdrwxr-xr-x. 2 rlh rlh ...原创 2018-04-20 12:39:05 · 229 阅读 · 0 评论 -
进程间通信(Linux)
进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息。IPC方式包括管道(匿名管道和命名管道),消息队列,共享内存,信号量等。一、管道管道是Unix中最古老的进程间通信方式,我们把从一个进程连接到另一个进程的一个数据流称为“管道”。管道(匿名管道)的特点:只能用于具有共同祖先的进程(具有血缘关系的进程)之间进行通信;通常,...原创 2018-04-30 12:22:07 · 185 阅读 · 0 评论 -
队列的实现(顺序表和链表)
队列 队列其最主要的特点就是先进先出,因此在用顺序表和链表实现它的时候就要注意,它的入栈和出栈就要使用头插和尾删或者尾插和头插,他们的对应关系不能搞错。队列实现有以下动作:创建队列入队列出队列取队列首元素销毁队列队列的两种实现:顺序表实现://SqQueue.h#pragma once ...原创 2018-04-12 10:47:20 · 505 阅读 · 0 评论 -
栈的实现(顺序表和链表形式)
栈的实现 要实现栈首先我们需要了解什么是栈,即就是栈的定义。 栈和队列是很想像的,但是他们有一个根本的区别,栈是后进先出,而队列是先进先出,因此要好好区分这一点。实现栈需要实现栈的以下几个动作:创建栈入栈出栈取栈顶元素销毁栈因此它相对于实现顺序表和链表来说是比较简单的,因为实现顺序表、链表往往动作是非常多的。栈的入栈和出栈实现时就是使用头插和头删或者是尾插和尾删,这...原创 2018-04-12 10:24:20 · 429 阅读 · 0 评论 -
静态顺序表的实现(C)
引言 要实现静态顺序表,我们首先需要知道什么是顺序表。 顺序表是指用一段地址连续的存储单元依次存取数据元素的线性结构。 顺序表采用的是连续的地址空间,这是与链表的本质区别。对于连续的地址空间,我们一般采用数组,而数组又分为静态数组和动态数组。我们本次要实现的就是采用静态数组的顺序表。 实现静态顺序表的操作静态顺序表的结构体typedef char SeqListType;...原创 2018-03-29 11:03:15 · 524 阅读 · 0 评论 -
链表经典练习题
链表经典练习题 一、从尾到头打印单链表 因为单链表是有指向的,前一节点只能指向下一节点,因此为了实现从尾到头打印链表可以使用一种非常简单的方法就是递归,先遍历再输出。 代码实现:void LinkListReversePrint(LinkNode* head){ 85 if(head == NULL){ 86 return;//空链表 8...原创 2018-04-16 14:55:57 · 23536 阅读 · 5 评论 -
带头结点双向链表的实现
带头结点的双向链表较带头结点的单向链表来说,其思路更加简单,更好实现,但是要注意一点就是双向链表有prev和next两个指针,其指向要思路清晰。 下面是实现代码:\\DLinkList.h#pragma once#include<stdio.h>#include<stdlib.h>#include<stddef.h>typedef char DL...原创 2018-04-09 18:01:11 · 370 阅读 · 0 评论 -
无头结点无环的单链表实现
//linklist.c#include <stdio.h>#include <stdlib.h>#include <string.h>#include "linklist.h"#define TESTHEADER printf("\n============%s=========", __FUNCTION__)//初始化链表void Link...原创 2018-03-26 17:23:27 · 244 阅读 · 0 评论 -
C++:四种智能指针
智能指针智能指针在C++中非常常用,在学习指针指针的时候,发现创造它的大佬太牛逼了,为了以后学习,我就对它进行了一些总结为马产生了智能智能在平时写代码的时候,时常会忘记释放自己动态开辟出来的资源,因此我们在处理相关逻辑的时候就会变得异常的谨慎,但是即使这样,有一些隐形的一些问题,还是会导致资源被泄露了,让人防不胜防啊。有这样的困惑,就有大佬来帮我们解决这个困惑了,这不大佬们就创造出了智...原创 2018-08-08 21:16:08 · 1017 阅读 · 0 评论