2 二木成林

尚未进行身份认证

暂无相关简介

等级
TA的排名 5k+

考研数据结构之栈(2.5)——练习题之求解二次方根A的迭代函数,写出相应的递归算法和非递归算法(C表示)

题目分析实际上就是递归的使用。代码核心代码:/* 递归算法 */float sqrt(float A,float p,float e) { if(abs(p*p-A)<e) { return p; } else if(abs(p*p-A)>=e) { sqrt(A,(p+A/p)/2,e); }}/* 非递归算法 */float sqrt_2(float A,float p,float e) { while(abs(p*p-A)>=e)

2020-05-31 21:25:33

考研数据结构之栈(2.5)——练习题之设计一个递归算法求n个不同字符的所有全排列(C表示)

题目设计一个递归算法求n个不同字符的所有全排列。分析参见:全排列(递归算法)。代码核心代码:/* 所有字符的全排列 *//* str[]指的是是字符数组;k指的是n-1;n指的是str数组的长度 */void perm(char str[],int k,int n) { int i,j; char temp; if(k==0) {// 处理只有一个数的情况 for(j=0; j<n; j++) { printf("%c",str[j]); } p

2020-05-31 21:11:00

考研数据结构之队列(3.3)——练习题之设计一个循环队列,用front和rear分别作为队头和队尾指针,另外用一个标志tag表示队列是空还是不空来设计队列的结构和相关基本运算算法(C表示)

题目设计一个循环队列,用front和rear分别作为队头和队尾指针,另外用一个标志tag表示队列是空还是不空,约定当tag为0时队空,当tag为1时队不空,这样就可以用front==rear作为队满的条件要求,设计队列的结构和相关基本运算算法(队列元素是int型)。分析结构体定义:/* 顺序队类型定义 */typedef struct { int data[maxSize]; int front;// 队首指针 int rear;// 队尾指针 int tag;// 表示队列是空

2020-05-31 20:11:14

考研数据结构之队列(3.3)——练习题之如果运行在循环队列的两端都可以进行插入和删除操作,写出从队尾删除和从队头插入的算法(C表示)

题目如果允许在循环队列的两端都可以进行插入和删除操作,写出从队尾删除和从队头插入的算法。分析用一维数组data[0,....maxSize1]实现循环队列,其中maxSize是队列长度。设置队头指针front和队尾指针rear,约定front指向队头元素的前位置,rear指向队尾元素。定义满足front-rear时为队空。从队尾删除元素,则rear向着下标减小的方向行走:从队头插入元素,front同样向着下标减小的方向行走。因此,当满足rear==(front-1+maxSize...

2020-05-31 18:36:21

考研数据结构之队列(3.3)——练习题之假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾结点,但不设头指针,写出相应的入队列和出队列的算法(C表示)

题目假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾结点,但不设头指针,写出相应的入队列和出队列的算法。分析本题是链队基本操作的扩展,知道尾指针后,要实现元素入队,则直接用链表的插入操作即可。要实现出队操作,则需要根据尾指针找出头结点和开始结点,然后进行删除。要注意的是,尾指针应始终指向终端结点,并且当删除结点后队列为空时,必须特殊处理。代码核心代码:/* 入队列 *//* *&rear指的是尾指针;x指的是要插入的元素值 */void enQueue(C

2020-05-31 17:28:38

考研数据结构之队列(3.3)——练习题之利用两个栈s1和s2来模拟一个队列,然后利用栈的运算来实现队列的enQueue、deQueue及isQueueEmpty运算(C表示)

题目请利用两个栈sI和s2来模拟-一个队列,假设栈中元素为int型,栈中元素最多为maxSize。己知栈的3个运算定义如下。push(ST,x):元素x入ST栈。 pop(ST,&x):ST栈顶元素出栈,赋给变量X。 isEmpty(ST):判断ST栈是否为空。如何利用栈的运算来实现该队列的3个运算:enQueue(元素入队列)、deQueue(元素出队列)、isQueueEmpty(判断队列是否为空,空返回1,不空返回0)。分析栈的特点是后进先出,队列的特点是先进先...

2020-05-31 16:27:31

考研数据结构之栈(2.5)——练习题之设计一个共享栈s0和s1以及有关入栈和出栈操作的算法(C表示)

题目为了充分利用空间,顺序栈s0、s1共享一个存储区elem[0, ... , maxSize-1]。试着设计一个共享栈s0、s1以及有关入栈和出栈操作的算法,假设栈中元素是int型。分析算法思想:1)顺序栈栈底固定不变,因此将栈底设在存储区的两端,即s0栈底设在0处,sI栈底设在maxSize-1处,栈顶在0~maxSize-1的范围内变动。当两栈栈顶相遇时为栈满,这样可以尽可能地利用空间。2)sO的栈项为top0,s0入栈操作为:top0先自增1,然后存入元素:出栈操作为:先取...

2020-05-31 15:54:55

考研数据结构之队列(3.2)——链队的操作(C表示)

概述链队的要素:(1)两个状态队空状态:lqu->rear==NULL或者lqu->front==NULL 队满状态:假设内存无限大的情况就不存在队满的情况(2)两个操作元素进队操作(假设p指向进队元素):lqu->rear->next=p;lqu->rear=p; 元素出队操作(假设x存储出队元素):p=lqu->front;lqu->front=p->next;x=p->data;free(p);链表操作示意图:代

2020-05-31 14:44:03

考研数据结构之队列(3.1)——顺序队的操作(C表示)

概述顺序队使用循环队列来避免“假溢出”问题。循环队列的四个要素:(1)两个状态队空状态:qu.rear==qu.front 队满状态:(qu.rear+1)%maxSize==qu.front(2)两个操作元素x进队操作(移动队尾指针):qu.rear=(qu.rear+1)%maxSize;qu.data[qu.rear]=x; 元素x出队操作(移动队首指针):qu.front=(qu.front+1)%maxSize;x=qu.data[qu.front];代码#i

2020-05-31 12:26:12

考研数据结构之线性表(1.7)——练习题之设计一个实现下述要求的locate运的函数(C表示)

题目试设计一个实现下述要求的locate运算的函数。设有一个带头结点的双向链表L,每个结点有4个数据成员:指向前驱结点的指针prior、指向后继结点的指针next、存放数据的成员data和访问频度freq。所有结点的freq初始时都为0。每当在链表上进行一次locate(x)操作时,令元素值为x的结点的访问频度freq加1,并将该结点前移,链接到与它的访问频度相等的结点后面,使得链表中所有结点保持按访问频度递减的顺序排列,以使频繁访问的结点总是靠近表头。分析算法用到了四个双向循环链表的主要操..

2020-05-30 23:13:36

考研数据结构之线性表(1.7)——练习题之已知L为不带表头结点的单链表的表头指针(L非空),链表中存储的都是整型数据,使用递归算法实现求链表中的最大整数、链表结点个数及所有整数的平均值(C表示)

题目已知L为不带表头结点的单链表的表头指针(L非空),链表中存储的都是整型数据,写出实现下列运算的递归算法。(1)求链表中的最大整数(2)求链表中的结点个数(3)求所有整数的平均值分析使用递归的方法。代码核心代码:/* 求链表中的最大整数 */int getMax(LNode *L) { if(L->next==NULL) { // 链表中仅一个结点 return L->data; // 其值即为所求 } int temp=getMax(L-&g

2020-05-30 22:46:57

考研数据结构之线性表(1.7)——练习题之已知在一维数组中依次存放着两个顺序表,编写程序将数组中两个顺序表位置互换,即将b1放在a1的前面(C表示)

题目已知在一维数组A[0,..m+n-1]中依次存放着两个顺序表(a1,a2,.,am)和(b,b2, ....b.).试编写程序,将数组中两个顺序表的位置互换,即将(b1,b2, ... , bn)放在(a1a2, ... ,am)的前面。分析题目分析:解决思路:代码核心代码:/* 位置互换元素 *//* nums[]指的是要进行互换元素的数组;i指的是起始下标;j指的是结束下标 */ void reverse(int nums[],int i,...

2020-05-30 22:33:26

考研数据结构之线性表(1.7)——练习题之编写一个算法将m各有序(从小到大)顺序表合并成一个有序顺序表,假设所有顺序表存储在一个m行maxSize列的二维数组中(C表示)

题目编写一个算法,将m(m≥2)个有序(从小到大)顺序表合并成个有序顺序表,假设所有顺序表存储在一个m行maxSie(maxSize足够大)列的二维数组lists[m][maxSize]中,要求把1~m-1行所在的顺序表合并在0行所在的顺序表中,各表的长度存储在数组lens[m]中,合并过程中不另设新的顺序表存储空间。分析可以将m各顺序表的合并先处理为两个顺序表的合并,参考:将两个有序(非递减有序)顺序表合并成为一个顺序表,合并后的结果放到A[]中不另设新的顺序表存储空间,将lists中的...

2020-05-30 22:08:32

考研数据结构之线性表(1.7)——练习题之已知一个带表头结点的单链表中含有3类字符(数字字符、字母字符和其他字符),编写一个函数构造三个新链表使每个链表只包含同类字符(C表示)

题目已知一个带表头结点的单链表中含有3类字符(数字字符、字母字符和其他字符)。试编写个函数,构造3个新的单链表,使每个单链表中只包含同类字符。要求使用原表的空间,表头结点可以另辟空间。分析遍历链表,判断各个结点是属于什么字符,然后分别添加到对应的链表中。代码核心代码:/* 分离各种字符 */ void separate(LNode *&LA,LNode *&LB,LNode *&LC) { // 原来的单链表是LA,新的三个单链表是LA(数字)、LB..

2020-05-30 21:54:58

考研数据结构之线性表(1.7)——练习题之通过遍历一趟链表将链表中所有结点这种所有结点的链方向逆转(C表示)

题目设计一个有表头指针为h的单链表,设计一个算法,通过遍历一趟链表,将链表中所有结点的链方向逆转。分析就是相当于链表的头插法。代码核心代码:/* 逆置单链表 *//* *L指的是要逆置的单链表 */void reverList(LNode *L) { LNode *temp=L->next;// 开始结点(即第一个结点) LNode *q;// 用来记录后继结点 L->next=NULL ; while(temp!=NULL) { q=temp

2020-05-30 21:37:57

考研数据结构之线性表(1.7)——练习题之A和B都是顺序表,编写一个比较A和B的算法(C表示)

题目分析先找出A和B中前面对应位置相同的元素,用指针i和j分别指示A和B中不同的元素,根据指针i和j提供的元素信息即可得到A和B的比较结果。代码核心代码:/* 比较A和B的大小 */int compare(int A[],int An,int B[],int Bn) { int i=0,j=0; while(i<An&&j<Bn) {// 处理A和B顺序表中的公共部分 if(A[i]==B[j]) { i++; j++; } e

2020-05-30 21:36:07

考研数据结构之线性表(1.7)——练习题之编写一个将A和B中所有元素组成一个新的从小到大的有序顺序表C的算法,要求所有重复的元素只保留一个(C表示)

题目设A和B是两个顺序表,其元素按非递减的顺序排列。编写一个将A和B中所有元素结点组成一个新的从小到大的有序顺序表C的算法,要求所有重复元素只保留一个。分析还是在归并算法上进行修改。代码核心代码:/* 归并A和B表 *//* A[]指的是A顺序表;An指的是A的长度;B[]指的是B表,Bn指的是B的长度;C[]指的是要合并后的表;&Cn指的是C数组的长度,要进行修改 */void merge(int A[],int An,int B[],int Bn,int C[],i

2020-05-30 21:06:08

考研数据结构之线性表(1.7)——练习题之A和B两个顺序表中相同元素组成一个新的从大到小的有序顺序表C的算法(C表示)

题目设A和B是两个顺序表,其元素按递增的顺序排列。编写一个将A和B中相同元素组成一个新的从大到小的有序顺序表C的算法。分析在归并算法的基础上稍加改动,只需要将当前扫描到的相等元素归入C表即可。代码核心代码:void merge(int A[],int An,int B[],int Bn,int C[],int &Cn) { int i=An-1; int j=Bn-1; int q=0; while(i>=0&&j>=0) { if(

2020-05-30 20:50:21

考研数据结构之线性表(1.7)——练习题之将两个有序(非递减有序)顺序表合并成为一个顺序表,合并后的结果放到A[]中不另设新的顺序表存储空间(C表示)

题目编写一个算法实现两个有序(非递减有序)顺序表合并成为一个顺序表,假设第一个顺序表存储在A[]中,第二个顺序表存储在B[]中,A[]和B[]的长度为maxSize,maxSize足够大,合并后的结果放在A[]中,不另设新的顺序表存储空间。分析实现顺序表A和B的合并过程:从A和B的最好一个元素逐个向前进行比较,将较大的元素先定位在A[]中,直到合并过程结束。代码核心代码:void merge(int A[],int &An,int B[],int Bn){ for(int

2020-05-30 20:43:31

LeetCode之1346. 检查整数及其两倍数是否存在

概要题目来源链接:https://leetcode-cn.com/problems/check-if-n-and-its-double-exist/难度:简单类型:数组题目给你一个整数数组arr,请你检查是否存在两个整数N 和 M,满足N是M的两倍(即,N = 2 * M)。更正式地,检查是否存在两个下标i 和 j 满足:i != j 0 <= i, j < arr.length arr[i] == 2 * arr[j]示例示例 1:输入...

2020-05-28 20:56:31

查看更多

勋章 我的勋章
  • GitHub
    GitHub
    绑定GitHub第三方账户获取
  • 签到新秀
    签到新秀
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 技术圈认证
    技术圈认证
    用户完成年度认证,即可获得
  • 新人勋章
    新人勋章
    用户发布第一条blink获赞超过3个即可获得
  • 阅读者勋章Lv1
    阅读者勋章Lv1
    授予在CSDN APP累计阅读博文达到3天的你,是你的坚持与努力,使你超越了昨天的自己。
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 1024勋章
    1024勋章
    #1024程序员节#活动勋章,当日发布原创博客即可获得
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。
  • 学习力
    学习力
    《原力计划【第二季】》第一期主题勋章 ,第一期活动已经结束啦,小伙伴们可以去参加第二期打卡挑战活动获取更多勋章哦。