![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
小白~
在校学生。
展开
-
7-16 银行排队问题之单队列多窗口服务 (25 分)
7-16银行排队问题之单队列多窗口服务(25分)假设银行有ķ个窗口提供服务,窗口前设一条黄线,所有顾客按到达时间在黄线后排成一条长龙。当有窗口空闲时,下一位顾客即去该窗口处理事务。当有多个窗口可选择时,假设顾客总是选择编号最小的窗口。本题要求输出前来等待服务的Ñ位顾客的平均等待时间,最长等待时间,最后完成时间,并且统计每个窗口服务了多少名顾客。输入格式:输入第1行给出正整数N(≤1...原创 2018-11-08 23:54:38 · 11895 阅读 · 2 评论 -
字符类型与整形之间的转换
字符类型存储的是字符的ASCII码。所以字符类型可以以整数形式输出。将整数赋值给字符类型,然后以字符类型输出,就是输出ASCII对应的整形的字符;但是将整形赋值给字符类型之后以整形输出,输出的不一定是原来赋值的整形。因为ASCII码只规定了-128〜127之间,在这之内,以什么整形赋值的就是以什么整形输出的。但是超过这个范围,就会自动进行转换,不会在输出原来的数值。 将字符类型赋值...原创 2018-12-04 11:32:09 · 8579 阅读 · 2 评论 -
字符串匹配算法的改进(数组下标从0开始)包括BF算法和KMP算法
在数据结构课程中我们学习的BF算法和KMP算法都是忽略0位置,从1位置开始的。这就给我们带来了很多麻烦,在标准输入流中都是从零位置开始输入的,所以需要改进一下BF算法,使其从0位置开始比较。下面是书本上从1位置开始的BF算法:int Index_BF(SString S,SString T,int pos){ int j=1; int i=pos; //初始化i...原创 2019-04-12 15:50:35 · 898 阅读 · 3 评论 -
二叉树搜索树(即:二叉排序树,二叉查找树)
1、定义:二叉排序树或者是一颗空树,或者是具有下列性质的二叉树:(1)若它的左子树不空,则左子树上的所有结点的值均小于它的根结点的值。(2)若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值。(3)它的左、右子树叶分别是二叉排序树。二叉排序树是递归定义的。由定义可得:中叙遍历二叉排序树是可以得到一个结点值递增的序列。二叉排序树的二叉链表存储表示:...原创 2019-04-13 16:39:22 · 4211 阅读 · 2 评论 -
二叉树的非递归遍历(前,中,后)
1、中序遍历(1)递归中序遍历void OrderTree(BinTree T){ if(T){ cout<<T->key; OrderTree(T->lchild); OrderTree(T->rchild); }}(2)非递归中叙遍历根据中序遍历的顺序,对于任一结点,优先访问其...原创 2019-04-09 23:26:51 · 156 阅读 · 1 评论 -
数据结构——图
一、图的存储结构1、邻接矩阵用邻接矩阵表示法表视图,出了一个用于存储邻接矩阵的二维数组外,还需要用一个一位数组来存储顶点信息。#define MaxInt 32767 //表示极大值#define MVNum 100 //最大顶点数typedef char VerTexType; //假设顶点的数据类型为字符型typedef int Ar...原创 2019-04-28 21:00:39 · 1063 阅读 · 0 评论 -
Floyd算法(转载)
注:此博客前半部分转载于:https://www.cnblogs.com/wangyuliang/p/9216365.html暑假,小哼准备去一些城市旅游。有些城市之间有公路,有些城市之间则没有,如下图。为了节省经费以及方便计划旅程,小哼希望在出发之前知道任意两个城市之前的最短路程。 上图中有4个城市8条公路,公路上的数字表示...原创 2019-04-28 21:15:09 · 8251 阅读 · 1 评论 -
普里姆算法(Prim)
普里姆算法是归并顶点的算法,与边数无关,所以适用于稠密图。构造最小生成树一定有下面两个特点:1、尽量选取最小的权值的边,并且不能有回路2、n个顶点只选取n-1条边。普里姆算法是由最小生成树(简称为:MST)的一条性质引出来的:假设N=(V,E)是一个连通图,U是顶点集V的一个非空子集。若(u,v)是一条具有组小权值的边,其中u∈U,v∈ V-U,...原创 2019-05-07 14:42:25 · 42518 阅读 · 9 评论 -
KMP算法的nextval数组
nextval数组是在next数组缺陷的情况下提出的,例如:模式“aaaab”在和主串"aaabaaaab"匹配时,当i=4,j=4时s.ch[i]!=T.ch[j],由于next[j]=3的指示,会模式串右滑一位进行i=4,j=3的比较,接着有根据next数组的指示会进行i=4,j=2,i=4,j=1的比较。实际上,因为模式串1~3个字符和第四个字符都相等,因此不需要再和主串中第第四个字符比较,...原创 2018-11-10 21:44:52 · 1696 阅读 · 1 评论 -
KMP算法
怎么说呢,KMP算法确实有难度。我一开始就是搞不明白,半懂不懂的,后来看了大神的帖子才有点小明白。特此写个博客,加深一下印象,并且希望能够理解的更透彻一些。大神博客:http://www.cnblogs.com/tangzhengyue/p/4315393.html要了解KMP算法,首先需要了解BF算法。一、BF算法——最简单最直观的模式匹配算法首先,要说明的是模式匹配不一定是从主...原创 2018-11-03 21:49:22 · 222 阅读 · 0 评论 -
链队的实现及操作
链队通常用单链表来表示。所以需要两个分别用来指向队头和队尾的指针。为了便于插入和判断链队的队空(没有队满),还需要增加一个头结点。初始化是使头指针和尾指针都指向头结点,表示队空。链队的存储结构:typedef int QElemType;typedef struct QNode{ QElemType data; struct QNode *next;}QNode,*...原创 2018-10-27 21:44:35 · 309 阅读 · 0 评论 -
用递归算法求点链表中的最大整数
算法:int maxLinkNode(LinkNode L,int max){ if(L==NULL) //结束标志,如果L指向的当前结点为NULL,则返回最大值max return max; if(L->data>max){ //如果当前结点的整数大于max max=L->data; ...原创 2018-10-28 17:33:09 · 2928 阅读 · 0 评论 -
递归算法求单链表的操作
#include<stdio.h>typedef struct Node{ int data; struct Node *next;}Node,*LinkNode;int maxLinkNode(LinkNode L);int AllNode(LinkNode L);float AverageNode(LinkNode L,float sum,float ...原创 2018-10-28 19:21:47 · 598 阅读 · 0 评论 -
malloc(),calloc(),realloc()函数的区别
一,malloc()函数malloc()的原型为void * malloc(unsigned int num_bytes)num_byte为要申请的空间大小,需要我们自己去计算,比如我们要20个INT型的空间大小,就可以使用:p =(int *)malloc(20 * sizeof(int)); 二,calloc()函数ccallo()函数的原型是: void * callo...原创 2018-10-23 18:29:36 · 260 阅读 · 0 评论 -
一个函数被调用系统之前系统做的三件事和被调函数返回调用函数的之前系统做的三件事
在一个函数被调用之前系统做的三件事:1、将所有的实在参数,返回地址等信息传递给被调用函数保存。2、为被调用函数的局部变量分配存储区。3、将控制入口转移到被调函数的入口。 以上第二步可见,在被进入调用函数之前就已经对其内部的局部变量进行分配空间,所以调用函数内部最好不要有重复的局部变量(这里重复的局部变量比如第一个if条件句里面定义了一个int p;然后又在一下一个if()条件句...原创 2018-10-23 19:14:08 · 750 阅读 · 0 评论 -
顺序栈的实现
//栈的存储结构typedef struct stacknode{ SElemType *base; //栈底指针 SElemType *top; //栈顶指针 int stacksize; //栈可用的最大容量}顺序栈和顺序表一样都是借助数组实现的,只不过顺序栈只能在尾部进行增加或者删除。base指针始终指向栈底位置,若base为NULL,则表明栈...原创 2018-10-23 20:49:42 · 227 阅读 · 0 评论 -
链栈的实现
typedef int ElemType;typedef struct StackNode{ ElemType data; //当前结点的的数据域 struct StackNode *next; //指向前一个结点的指针}StackNode,*LinkStack;链栈的实现是先定义一个结点指针,使其为NULL。这个作为判断是否空栈的标志。链栈...原创 2018-10-23 21:08:09 · 281 阅读 · 0 评论 -
在一个数组中实现两个堆栈
题目要求:。将编号为0和1的两个栈放于一个数组空间V [米]中,底栈分别处于数组的两端当第0号栈的栈顶指针顶[0] = - 1时该栈为空;当第1号栈的栈顶指针顶[1] = M时,该栈为空。两个栈从两端向中间增长试编写双栈初始化,判断栈空,栈满,进栈和。 。出栈等算法的函数双栈数据结构的定义如下:typedef struct { int top[2],bot[2]; //栈顶和...原创 2018-10-24 21:25:01 · 866 阅读 · 0 评论 -
用栈实现判断回文
用栈实现判断回文利用了栈先进后出的特性。即只要把一般放进栈里面,然后利用栈的特性,后进先出,然后一个一个弹出来和后面的比较即可。但是这需要先把字符串存到一个数组中,计算出字符串的长度,然后再将一半存入栈中。#include<stdio.h>#include<string.h>typedef struct { char a[100]; int...原创 2018-10-27 19:36:35 · 1874 阅读 · 0 评论 -
循环队列的实现及操作
普通的顺序队列实现有弊端(P71),用循环队列实现用来解决这一弊端,同时循环队列实现需要空出一个空间来,依次来区分队满和队空。他的指针是不是真正的指针变量,而是int型的,用来记录数组下标,起到了指针的作用。因为只有这样才能实现取模循环注意:循环队列的尾指针始终指Rear向下一个空间,即为指针的上一个才是存放数据的空间。 循环队列的头指针Front始终指向最后一个有...原创 2018-10-27 20:51:16 · 436 阅读 · 0 评论 -
以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素。P85 T(6)
循环链表表示队列,只设一个队尾结点。因为是循环链表,队尾结点的下一个就是头结点,所以可以从队尾结点得知头结点的位置。判断队空的:队尾指针指向头结点一、初始化bool InitQueue(LinkQueue Q){ Q->next=Q; //头结点指针指向自己实现循环链表 Rear=Q; //队尾指针指向头结点,表示队空 ...原创 2018-10-28 16:57:54 · 1934 阅读 · 1 评论