
数据结构(C实现)
swo_ows
博主只是个小菜鸡,欢迎各路大佬指教
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
排序(C实现)
在数据结构中我们常见的排序算法有:直接插入排序、希尔排序、选择排序、堆排序、交换排序(冒泡排序)、快速排序、归并排序,接下来我给大家分享一下我在写这些代码时的想法(从小到大,从左到右),以及各个排序的比较首先我们得写一个交换函数,因为后面基本每个排序都有使用。void Swap(int *x, int *y)//交换函数{ int tmp = *x; *x = *y; *y = ...原创 2018-10-03 21:58:22 · 275 阅读 · 0 评论 -
海量数据面试题
1、给定100亿个整数,设计算法找到只出现一次的整数;先将100亿个整数切割到100个文件中,每个文件利用哈希表存储,找出每个文件中只出现一次的整数,再合并最后找出只出现一次的整数。2、给两个文件,分别有100亿个整数,我们只有1G内存,如何找到两个文件交集;和上题一样,先将两个文件都利用相同的散列函数各切割为100份,并且将两个文件的切割文件按一样的规律编号,再将相同编号的文件进行合...原创 2018-10-26 12:04:32 · 375 阅读 · 1 评论 -
位图
一、概念我们知道一个字节八个比特位,我们可以将每个字节的比特位看做一个哈希表,由低位到高位依次定下标,每个下标代表唯一的元素值,当比特位是0不存在,是1存在。例:int a[]={1,3,7,4,12,16,19,13,22,18}二、源代码1、bitmap.h#ifndef _BITMAP__H_#define _BITMAP__H_#include "stdio...原创 2018-10-26 12:01:09 · 119 阅读 · 0 评论 -
哈希表(链地址法)
一、概念我前面说过哈希表的开放定址法,现在说说链地址法又称开散列法,在利用毕散列时我们说到有哈希冲突,而开散列法正好避开了哈希冲突,每个下标所在位置就是桶口,每个桶可以看做是一个链表,我们把哈希冲突的元素放在同一个桶中。 虽然我们加设了一个指针,看起来增加了存储开销,但是毕散需要大量的空闲空间以保证搜索速度,而表所占的空间比指针要大得多,所以开散列反而比毕散列要节省存储空间。二、源代码...原创 2018-10-26 11:31:57 · 3747 阅读 · 0 评论 -
搜索二叉树面试题
一、面试题1、判断一个单词是否拼写正确;直接将所有单词入搜索二叉树,判断单词是否正确时只需搜索二叉树中是否存在该单词即可。2、请模拟实现一个简单的中英互译的字典;本题利用搜索二叉树的key、value模式。如果是英译汉时,key存放英文,value存放中文,再根据英文找到结点所在,查找结点的value即可得到中文;英译汉时,key存放中文,value存放英文,再根据中文找到结点所在...原创 2018-10-23 16:25:03 · 289 阅读 · 0 评论 -
搜索二叉树
一、搜索二叉树的概念搜索二叉树也称二叉搜索树、二叉排序树,它或者是一棵空树,或者满足以下性质的二叉树:1、若它的左子树不为空,则左子树上所有结点的值都小于根结点的值2、若它的右子树不为空,则右子树上所有结点的值都大于根结点的值3、它的左右子树也分别为搜索二叉树二、源代码1、binsearch.h#ifndef _BINSEARCH__H_#define _BINSE...原创 2018-10-23 15:57:52 · 178 阅读 · 0 评论 -
堆
一、堆的概念有一个集合K={k0,k1,k2,...,k(n-1)},把它的所有元素按完全二叉树的顺序存储方式存储在一个一位数组中。堆的排序思想可看博客中的排序。三、源代码1、head.h(大堆)#ifndef _HEAD__H_#define _HEAD__H_#include <assert.h>#include <malloc.h>#inc...原创 2018-10-22 22:45:03 · 120 阅读 · 0 评论 -
二叉树
一、说明本文的Stack.h参考博客中的栈,Queue.h参考博客中的队列。二、二叉树概念一棵二叉树时结点的一个有限集合,该集合或者为空,或者是由一个根结点加上两棵分别为左子树和右子树组成;二叉树每个结点最多有两棵子树,子树有左右之分,次序不能颠倒。三、二叉树的前中后非递归遍历二叉树的前中后递归遍历非常简单,但是非递归有点小难,所以我把非递归的算法思想说一下,在实现非递归时我们...原创 2018-10-22 18:06:37 · 651 阅读 · 0 评论 -
迷宫(利用栈)
一、思路(回溯)我们拿个例子来举:0 0 0 0 0 00 0 1 1 1 00 0 1 0 1 00 0 1 1 1 10 0 1 0 0 00 0 1 0 0 0我们把入口改为2,接下来走过的地方依次相加,并将走过的横纵坐标入栈;0 0 0 ...原创 2018-10-20 00:18:54 · 359 阅读 · 0 评论 -
栈和队列面试题
一、说明文章中的Stack.h参考博客中的栈,Queue.h参考博客中的队列。二、面试题1、实现一个栈,要求实现Push(入栈)、Pop(出栈)、Min(返回最小值)的时间复杂度为O(1);本题我们可以利用两个栈stack1、stack2来实现此操作,stack1就是正常的入栈,stack2如果为空则直接进行入栈,当stack1入栈元素小于stack2栈顶元素,则将该元素入stac...原创 2018-10-20 00:03:27 · 263 阅读 · 0 评论 -
队列
一、队列概念只允许在一端进行插入数据操作,此端为队头,在另一端进行删除数据操作的特殊线性表,此端为队尾,队列具有先进先出的特性。二、源代码1、Queue.h#ifndef _QUEUE__H_#define _QUEUE__H_#include "stdio.h"#include "assert.h"#include "malloc.h"typedef int Da...原创 2018-10-19 23:32:19 · 123 阅读 · 0 评论 -
栈
一、栈的概念一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作,进行数据插入和删除的一端成为栈顶,另一端称为栈底,无元素的栈为空栈,栈又称为后进先出的线性表。二、源代码1、Stack.h#ifndef _STACK__H_#define _STACK__H_#include "stdio.h"#include "assert.h"#include "mallo...原创 2018-10-19 22:41:04 · 107 阅读 · 0 评论 -
带头双向链表
一、带头双向链表与无头单链表比较带头双向链表:可以找到前驱后驱,增删复杂,多一个指针存储空间 无头单链表:只能找到前驱,增删简单二、源代码一、list.h#ifndef _LIST__H_#define _LIST__H_#include "stdio.h"#include "assert.h"#include "malloc.h"#include "string.h...原创 2018-10-18 17:16:39 · 222 阅读 · 0 评论 -
链表面试题
一、说明本文的linklist.h参考博客中的“无头单链表”二、链表题1、删除一个无头单链表的非尾节点;2、单链表实现约瑟夫环;约瑟夫环:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。将出列编号顺序用一个新链表存起来。...原创 2018-10-18 17:03:00 · 149 阅读 · 0 评论 -
顺序表与链表的比较及其使用场景
顺序表头和中间插入、删除效率低,可随机访问,CPU高速缓存效率高链表任意位置插入删除高效,不可随机访问,CPU高速缓存效率低使用场景从它们的优缺点可以看出,在需要大量的插入和删除操作时使用链表,需要随机访问时使用顺序表...原创 2018-10-18 16:50:01 · 1349 阅读 · 0 评论 -
无头单链表
一、链表概念链表:一种链式存储的线性表,用一组地址任意的存储单元存放线性表的数据元素,称存储单元为一个节点 链表有单链表、双链表和双向循环链表,每种链表都有无头和带头两种,带头就是头结点不存放数据元素二、源代码1、linklist.h#ifndef __LINKLIST_H__ #define __LINKLIST_H__ #include "stdio.h" #incl...原创 2018-10-18 16:26:44 · 312 阅读 · 0 评论 -
静态顺序表
一、顺序表概念1、顺序表:用一段地址连续的存储单元(一般采用数组)依次存储数据元素的线性结构2、顺序表有静态顺序表和动态顺序表,我主要用静态顺序表来实现一些操作二、源代码1、Seqlist.h#define _CRT_SECURE_NO_WARNINGS#ifndef _SeqList__h_#define _SeqList__h_#include "stdio.h"...原创 2018-10-18 16:03:18 · 357 阅读 · 0 评论 -
哈希表(开放定址法)
一、哈希表概念由于搜索二叉树中元素存储位置与元素各个关键码之间没有对应的关系,因此在查找一个元素时需要一个一个进行比较,搜索效率取决比较次数。如果构造一个存储结构使它存储位置与关键码能够一一对应,那么查找效率就会高效,即用一样的方法存储和查找关键码。哈希表有毕散列(开放定址法)和开散列(链地址法),本文主讲毕散列。二、哈希冲突首先毕散列容量是有限的,当满了时需要扩容,扩容时注意需要重新...原创 2018-10-24 21:12:39 · 2896 阅读 · 0 评论