数据结构
文章平均质量分 62
周杰伦今天喝奶茶了吗
喜欢周杰伦,也喜欢CSDN博客,这使我快乐!
展开
-
单链表
#include typedef int ElemType;typedef struct LNode //定义单链表节点类型 { ElemType data; struct LNode *next;}LinkList;//1、初始化有序单链表L。void InitList(LinkList *&L){ L=(LinkList *)malloc(sizeof(Lin原创 2017-11-08 22:46:19 · 1800 阅读 · 0 评论 -
如何找到数组所有和等于一个给定数的数对?
方法一:在一个无序数组中查找一个数的复杂度是O(N),对于每个数字arr[i],都需要查找对应的Sum-arr[i]在不在数组中,很容易得到时间复杂度还是O(N^2)。为了优化:是将每个元素插入到哈希表中(不进行排序)。对于每一个x,我们只需查找它的补,Sum-x。找到,则这一数对的和等于定数;方法二:首先对数组进行排序,时间复杂度为(N*log2N)。然后令i ...原创 2019-07-06 16:23:33 · 2655 阅读 · 1 评论 -
如何使用快速排序算法对整数数组进行排序?
什么是“快速排序”?快速排序是对冒泡排序的一种改进,其基本思想是基于分治法的:在待排序表L[1...n]中任取一个元素p作为基准通过一趟排序将待排序的表L划分为两部分L[1...k-1]和L[k+1...n],使得L[1...k-1]中的所有元素小于p,L[k+1...n]中的所有元素大于等于p,而p放在了其最终位置L[k]上,这个过程称为一趟快速排序。而后递归地分别对两个子表重复上述...原创 2019-07-07 09:33:04 · 5590 阅读 · 0 评论 -
如何在一次遍历中找到单个链表的中值?
我的想法记录:如果这个链表本身是有序的就好办了,直接取到 len/2 就得到中值(不对单链表不能随机存取,要想求表长,得从第一个结点开始顺序依次访问表中每一个结点,然后计数,直到访问到空结点为止)可是题目中没有说这个单链表是有序的诶遍历一次,可以找到max 或者min怎么一次就找到中值呢?还有就是关于题目的疑问,这个“中值”是指位置在中间,还是大小值处于中间呀?应...原创 2019-08-28 09:24:33 · 3017 阅读 · 2 评论 -
如何使链表反向?
我的想法:在构建单链表的时候采用“头插法”,得到的就是反向;如果已经构建好了,欲使单链表反向,也就是要逆序这时候可以在首位各建立一个指针,将首部尾部数据相互交换,直到交换到最中间。(但这种想法似乎不太适合单链表呀,顺序表可以用这种方法)除了交换,还可以用遍历然后插入的方法,依次将结点插入到固定的尾部指针后面,即可构成逆序。参考答案:LinkList Revers...原创 2019-08-29 10:12:24 · 2538 阅读 · 0 评论 -
如何得到单链表的长度?
求表长操作就是计算单链表中数据结点(不含头结点)的个数,需要从第一个结点开始顺序依次访问表中的每个结点,为此需要设置一个计数器变量,每访问一个结点,计数器加1,直到访问到空结点为止。算法的时间复杂度是int ListLength(LinkList *L){ int n=0; LinkList *p=L; while(p->next!=NULL){ n++; p=p-...原创 2019-08-31 09:12:13 · 13240 阅读 · 5 评论 -
如何在给定的二叉树中执行先序遍历?
先序遍历:一、递归算法访问根节点;先序遍历左子树;先序遍历右子树;void PreOrder(BiTree T){ if(T!=NULL){ visit(T); PreOrder(T->lchild); PreOrder(T->rchild); }}二、非递归算法先将根结点进栈,在栈不空时循环:出栈p,访问*p结点,若其右孩子结点存在则将...原创 2019-08-31 09:27:28 · 1034 阅读 · 0 评论 -
如何实现冒泡排序算法?
关于冒泡排序的一些特点:是稳定的排序方法每趟排序都将会有一个元素放置到其最终的位置上void BubbleSort(ElemType A[],int n){ int i,j; ElemType tmp; for(i=0;i<n-1;i++){ for(j=n-1;j>i;j--){ if(A[j-1].key>A[j].key) { t...原创 2019-09-01 10:17:14 · 850 阅读 · 1 评论 -
如何计算给定二叉树中的叶节点数?
叶子节点的特征是无左孩子也无右孩子,还要注意与树只有一个节点的情况区分。一、程序计算int leaf(bitree t){ if(!t) return 0; //空树,无叶子 else if(!t->lch && !t->rch) return 1; else ...原创 2019-09-02 09:19:38 · 5863 阅读 · 0 评论 -
如何实现快速排序算法?
int Partition(ElemType A[],int low ,int high){ ElemType pivot=A[low];//每次总以当前表的第一个元素作为基准进行划分 while(low<high){ while(low<high&&A[high]>=pivot) --high; A[low]=A[high];//将比基准小的元素...原创 2019-09-04 09:19:25 · 603 阅读 · 4 评论 -
如何打印二叉搜索树的所有叶子?
首先,什么是二叉搜索树?之前我把二叉搜索树和线索二叉树混淆了。二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。我觉得打印二叉搜索树的所有叶子...原创 2019-09-05 09:40:31 · 1779 阅读 · 0 评论 -
如何实现后序遍历算法?
递归void PostOrder(BiTree T){ if(T!=NULL){ PostOrder(T->lchild); PostOrder(T->rchild); visit(T); //访问根结点也可写成这样 //printf("%c",T->data); }}非递归void PostOrder(BTNode *b){ BTN...原创 2019-09-06 15:28:48 · 952 阅读 · 0 评论 -
如何找到一个字符串的所有排列?
链接:https://www.nowcoder.com/questionTerminal/ab975d2d843b4f8593074930e03beaf7?source=relative来源:牛客网递归实现算法思想:求n位的字符串的全排列,先确定第0位,然后对后面n-1位进行全排列,在对n-1为进行全排列时,先确定第1位,然后对后面的n-2位进行全排列...由此得到递归函数和递归的结束条...原创 2019-09-07 11:56:42 · 1398 阅读 · 0 评论 -
如何在单链表中从尾部找到第三个节点?
方法一:从头遍历第一次,求出单链表长度L;再遍历一次,第L-3+1个节点就是从尾部倒数第3个节点。但这种方法需要遍历两遍。方法二:设要从尾部找第k个节点定义两个指针p1和p2,它们之间间隔k-1个节点。p1和p2均从头节点开始,p1先走,等间隔k-1个节点后,p2再出发。然后两个指针都继续移动,当p1移动到尾节点时,p2所在位置就是从尾部倒数第k个节点的位置。这种做...原创 2019-09-08 09:39:10 · 2065 阅读 · 4 评论 -
如何在给定数组中执行二分法搜索?
使用二分查找的前提是数组有序基本思路是:首先将给定Key值与表中中间位置元素的关键字比较,若相等,则查找成功,返回该元素的存储位置;若不等,则所需查找的元素只能在中间元素以外的前半部分或后半部分。然后在缩小的范围内继续进行同样的查找,如此重复,直到找到为止,或者确定表中没有所需要查找的元素,则查找不成功,返回查找失败的信息。int Binary_Search(SeqList L,int ...原创 2019-09-09 20:50:57 · 577 阅读 · 0 评论 -
如何在未排序整数数组中找到最大值和最小值?
关于这道题,我的第一个想法就是先自己设一个min 和max,然后遍历整数组。一个一个比较。如果某数比min小则将min赋值为该数,继续比较。就像这样:int min=100;int max=0;for(int i=0;i<n;i++){ if(num[i]<min) min=num[i]; if(num[i]>max) ...原创 2019-07-05 16:22:18 · 4474 阅读 · 1 评论 -
如何在给定的整数数组中找到重复的数字?
解一、最先涌现的想法是遍历一遍数组,用hash表记录每一个数字出现的次数;用空间换时间解二、剑指offer解法重新排序数组每个数字,当扫描到数字m的时候判断下标为i的数字是否等于m:如果是,就寻找下一个;如果不是,就判断下标为m的对应的数字是否等于m,如果它与第m个数字相等,就等于找到了一个重复的数字,如果不相等就把第i个数与第m个数交换位置,把m放在其对应的下标m的位置。...原创 2019-07-04 20:42:49 · 5791 阅读 · 1 评论 -
顺序表作业
#include #define MaxSize 10typedef int ElemType; //自定义类型语句 typedef struct{ int length; ElemType data[MaxSize+1]; }SqList;//1、初始化有序顺序表L。void InitList(SqList *&L){ L=(SqList *)mall原创 2017-11-08 15:30:31 · 957 阅读 · 0 评论 -
数据结构简答题
/*一、简答题1、 数据结构主要包括哪三方面内容? 答:数据的逻辑结构、数据的存储结构、数据的运算。2、什么是逻辑结构?什么是存储结构?两者有何关系? 答:数据的逻辑结构是从逻辑关系上描述数据的,可以看作是从具体问题抽象出来的数学模型;数据的存储结构是逻辑结构用计算机语言的实现或在计算机中的表示,是逻辑结构在计算机中的存储方式。原创 2017-11-08 22:55:23 · 10907 阅读 · 0 评论 -
双向链表实现访问频度递减
#include typedef int ElemType;typedef struct DNode//定义双链表节点类型 { ElemType data; ElemType freq; struct DNode *prior,*next; }DLinkList;bool InitList_DuL(DLinkList *&L){ L=(DLinkList *)mall原创 2017-11-08 23:03:58 · 1087 阅读 · 0 评论 -
栈
/*一、简答题答:栈的操作原则是后进先出。2、递归与栈有何关系?递归算法有何优缺点?答:递归函数是利用栈实现的;递归算法的优点:简洁。只需少量代码就可以描述出解题过程中所需的多次重复计算,大大减少了代码量;递归算法的缺点:时间空间消耗大,效率低。3、队列的操作原则是什么?答:队列操作的原则是先进先出。4、顺序队列操原创 2017-11-08 23:13:04 · 1196 阅读 · 0 评论 -
数据结构—串
一、简答题1、串的逻辑结构是什么?答:串是字符串的简称,它也是一种线性结构。串是由零个或多个字符组成的有限序列。2、空串与空格串的区别是什么?答:空串:含零个字符,长度为0;空格串:只包含空格字符。3、两个串相等的充分必要条件是什么?答:两个串相等的充分必要条件是:当且仅当两个串的长度相等并且各个对应位置上的字符都相同时,这两个串才是相等的。原创 2017-11-08 23:18:46 · 4712 阅读 · 0 评论 -
二叉排序树
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public class tree { public static void main(String[] args) throws NumberFormatException, IOException ...原创 2019-03-12 21:57:48 · 163 阅读 · 0 评论 -
约瑟夫环问题思路解读
有n个人,报数m的人出列。输出这n个人的出队顺序例如:有8个人,初始序列为 1 2 3 4 5 6 7 8当m=4时,出列顺序为:4 8 5 2 1 3 7 6思路:用一个数组p[ ],存放人的编号,将n个人的编号存到p[0]~p[n-1];从编号为1,数组为p[0],数组下标为t=0开始循环报数,数到m的人(该人下标为t=(t+m-1)%i)出列,i为数组中剩下的人数。...原创 2019-03-31 17:36:09 · 3501 阅读 · 2 评论 -
数据结构:关于树
在理解完全二叉树之前,首先要弄清楚完全二叉树和满二叉树的区别。1.什么是满二叉树?(1)满二叉树所有分支节点都有左孩子节点和右孩子节点;(只有度为0和度为2的节点)(2)满二叉树的所有叶子节点都在最下一层。2.什么是完全二叉树?(1)叶子节点只在层次最大的两层出现;(2)最下面一层的叶子节点都依次排列在该层最左边的位置上;(3)如果有度为1的节点,只可能有一个,且该节点...原创 2019-04-02 17:34:59 · 188 阅读 · 0 评论 -
数据结构:图( part one)
好多知识点,老忘……存在回路的图不存在拓扑序列。 回路:第一个顶点和最后一个顶点相同的路径称为“回路”或“环”。 如果一个图有n个顶点,并且有大于n-1条边,则此图一定有环。 图的邻接矩阵为非对称矩阵,说明图是有向图。 对于有向图,顶点的度等于其入度加出度的和。 连通针对无向图而言,强连通针对有向图而言。 若图的邻接矩阵中主对角线上的元素皆为0,其余元素全为1,则可断定该图一定为完...原创 2019-04-09 17:07:31 · 685 阅读 · 0 评论 -
数据结构与算法精选面试50题(附答案)
1.数组编码面试问题数组是最基本的数据结构,它将元素存储在一个连续的内存位置。这也是面试官们热衷的话题之一,在任何一次编程面试中,你都会听到很多关于数组的问题,比如将数组中元素位置颠倒,对数组进行排序,或者搜索数组上的元素。数组数据结构的主要优点是,如果知道索引,它可以提供快速的O(1)搜索,但是从数组中添加和删除元素是很慢的,因为一旦创建了数组,就无法更改数组的大小。为了创建更小或更...原创 2019-07-03 21:41:52 · 18906 阅读 · 16 评论 -
《我的第一本算法书》读后感
今天在国图发现并读了这本书~书里面的配图的确很详细,0基础读物。如果我最初学习数据结构的时候看了这本书,想必会少走很多弯路吧。但全本读完之后,我的感受是——懂的依然懂,不懂的还是不太懂。全书最让我惊喜的是“安全算法”这一部分。因为最近刚接触“密码学”,所以觉得这本书介绍的安全算法正好受用。只是,还是没能完全领会。我想关于这部分得再读才可以。(什么时候才能有看一遍就懂的学习能...原创 2019-10-02 15:25:16 · 491 阅读 · 0 评论