![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
cleverlemon
hello world !
展开
-
循环链表来实现约瑟夫环问题 c语言
已知n个人(以编号1,2,3,…,n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从K开始报数,数到m的那个人又出列;依次规律重复下去,直到圆桌周围的人全部出列。解:本题是约瑟夫环问题的实际场景。可用循环链表来实现。问题的核心步骤为: 建立无头结点的循环链表; 确定第一个报数人的位置; 不断从链表中删除结点,直到链表为空。代码如下:#include<stdio.h>#include<stdlib.h>//不带头结点的循环链原创 2020-06-10 18:26:47 · 571 阅读 · 0 评论 -
c++ 用类简单封装一个带头结点的单链表
本篇博客中代码的实现中采用了友元的使用,但一般写代码尽量不适用友元,除非万不得已,具体代码如下:#include<iostream>typedef int ElemType;class LinkList;//为使用友元,做一个声明class Node{public: Node(ElemType val=0) :data(val),next(NULL) { }...原创 2020-04-29 22:37:40 · 432 阅读 · 0 评论 -
c语言快速排序 (递归与非递归实现)
递归1、先在待排序序列中选择一个基准数据,一般常用的就是第一个数据2、i,j : i从前向后 j从后向前 当i < j时,进入循环(1)从后向前找第一个比基准小的数据(i<j),找到后就将其放到i位置(2)从前向后找第一个比基准大的数据(i<j),找到后就将其放到j位置3、将基准的值存储到i位置4、基准将数据序列划分成左右两部分,当左右两部分的数据量大于1时,递...原创 2020-03-31 22:40:26 · 3532 阅读 · 4 评论 -
串匹配算法 BF算法 KMP算法 C语言实现
BF算法 BF算法也称朴素算法,思想简单,但效率较低。代码如下:#include<stdio.h>#include<string.h>//s是主串,p是子串,从s串的pos位置开始搜索int BF(char* s,char* p,int pos)//时间复杂度O(n*m)(存在回退,n为s串长度,m为p串长度){ if(s==NULL||p==NULL) ...原创 2020-02-20 11:21:14 · 1050 阅读 · 1 评论 -
基数排序 --c语言
基数排序 基数排序是一种针对于有多个关键字的数据的排序算法,不需要两两数据进行排序。排序的思想: 1.按照位数将数据插入到相应队列; 2.按照队列的顺序依次将数据弹出。 算法的过程: 1.获取最大数字的位数; 2.将所有数据按照位的值顺序插入到队列中; 3.按照队列的顺序将所有的数据弹出。c语言代码如下:#include<stdio.h&g...原创 2020-02-10 12:23:02 · 1422 阅读 · 1 评论 -
二路归并排序
归并排序是建立在归并操作的一种有效的排序算法,将两个顺序序列合并成一个顺序序列的方法,称为二路归并。一种稳定的排序方法。代码如下:#include<stdio.h>#include<stdlib.h>#include<time.h>#define LENGTH 13void ShowData(int arr[]){ for(int i=0...原创 2020-02-05 13:49:18 · 440 阅读 · 0 评论 -
堆排序 C语言
堆排序 堆排序是在排序过程中,将向量中存储的数据看成一颗完全二叉树,利用完全二叉树中双亲结点和孩子结点之间的内在关系来选择关键字的最小的记录,即待排序记录中仍采用向量数组的方式存储,并非采用树的存储结构,二仅仅是采用完全二叉树的顺序结构的特征进行分析而已。 二叉树的顺序表示, 每个结点最多有两个孩子结点(left, right), 这样表示出来的二叉树是一颗完全二叉树。如果父结点的下标为...原创 2019-12-25 14:28:02 · 232 阅读 · 0 评论 -
直接插入排序 希尔排序
直接插入排序算法时间复杂度:O(n^2) 最好的时间复杂度: O(n) 空间复杂度: O(1) 稳定性: 稳定对于直接插入排序而言,数据越有序,其时间复杂度将越趋于O(n)void Insert(int* arr,int len){ for(int i=1;i<len;i++) { int tmp=arr[i]; int j; for(j=i-1;j>=0;...原创 2019-12-20 12:22:59 · 278 阅读 · 0 评论 -
冒泡排序、选择排序 C语言实现
#include<stdio.h>#include<stdlib.h>#include<time.h>#define NUMBER 10void Bubble(int* arr,intlen)//冒泡排序 时间复杂度O(n^2) 稳定{for(int i=0;i<len-1;i++) { for(int j=0;j<len-i...原创 2019-12-11 21:23:34 · 308 阅读 · 0 评论 -
数据结构 循环队列的基本操作 C语言
#include<assert.h>#include<stdio.h>#include<stdlib.h>#define size 10typedef int ElemType;typedef struct SqCycleQueue{ ElemType *space; int head; int tail; int queuesize;...原创 2019-12-06 23:14:01 · 382 阅读 · 0 评论 -
数据结构 带头结点的循环双向链表的基本操作
带头结点的循环双向链表代码如下:#include<assert.h>#include<stdio.h>#include<stdlib.h>typedef int ElemType;typedef union DataType{ int num; //用头结点的数据域存放结点个数 ElemType value;}DataType;typ...原创 2019-11-29 20:08:31 · 553 阅读 · 0 评论 -
数据结构之 c语言实现顺序表
定长顺序表#include<stdio.h>#include<stdlib.h>#define LISTSIZE 10#define TRUE 1#define FALSE 0typedef int ElemType;typedef int (*Compare)(ElemType, ElemType);typedef struct SqList{ ...原创 2019-11-22 20:25:17 · 426 阅读 · 0 评论 -
栈的应用之括号匹配问题
设表达式中包含三种括号:圆括号、花括号和方括号,它们可以互相嵌套。检验算法中可设置一个栈,每读入一个括号,若是左括号,则直接入栈,等待相匹配的同类右括号;若读入的是右括号,且与当前栈顶的左括号同类型,则二者匹配,将栈顶的左括号出栈,否则属于不合法的情况,另外,如果输入序列已读完,而栈中仍有等待匹配的左括号,或者读入了一个右括号,而栈中已无等待匹配的同类型左括号,均属不合法情况。当输入序列和栈同...原创 2019-10-20 13:42:53 · 567 阅读 · 0 评论 -
数据结构单链表的基本运算
#include<stdlib.h>#include<stdio.h>#define ERROR 0#define OK 1 typedef char ElemType;typedef struct Node //结点类型定义 { ElemType data; struct Node * next;}Node,*LinkList; //*LinkLi...原创 2019-10-18 12:26:29 · 832 阅读 · 0 评论