关闭

[置顶] 2010年计算机联考真题——一维数组循环左移

标签: 数据结构考研真题数据机构
447人阅读 评论(0) 收藏 举报
分类:

前记


从七月份决定开始考研,中间由于听报告,回家复习数学和政治而耽误了一些时间。自己准备报考山东大学计算机技术的专硕,幸好是数学是考数学二,专业课也只有一门数据结构,这位我的复习节省了很多时间,不想数学一和统考的计算机基础综合的专业复习那么费劲。现在数据结构的复习完全是参照《王道考研系列——2018年数据结构考研复习指导》在复习。对于数据结构虽然到时候是手写算法,但是毕竟这是编程,对于算法能否正确实现并符合题目要求,只有跑程序才能看见。所以复习的同时,有也想利用好csdn博客来记录自己复习过程,故现在开始把指导书上的所有题与基础算法和数据结构利用博客来记录一下。


题目


设将n(n,1)个整数存放到一维数组R中,试设计一个在时间和空间两方面尽可能有效的算法,将R中保有的序列循环左移P(0﹤P﹤n)个位置,即将R中的数据由(X0 X1 ……Xn-1)变换为(Xp Xp+1 ……Xn-1 X0 X1 ……Xp-1)要求:

  (1)给出算法的基本设计思想。

  (2)根据设计思想,采用C或C++或JAVA语言表述算法,关键之处给出注释。

  (3)说明你所设计算法的时间复杂度和空间复杂度


思路


对于这个问题:可以把问题转化为把数组的前p个数与后n-p个数进行位置互换。即把后n-p个数整体放到前p个数的前面即可。


代码

#include <iostream>
#include <string>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <cstdio>
#include <algorithm>
using namespace std;

//把下标在[left,right]的数进行逆置 
bool Reverse(int* A ,int left , int right , int size)
{
    if(left >= right || right >= size)
        return false;
    int mid = (left+right)/2;
    for(int i = 0 ; i < mid - left ; i++){
        A[i+left] += A[right-i];
        A[right-i] = A[i+left] - A[right-i];
        A[i+left] -= A[right-i];
    }
    return true;
}

//把前m个数与后n个数互换位置 
void Exchange(int* A ,int m, int n ,int size) 
{
    Reverse(A,0,m+n-1,size);        //下标0~m+n-1的数逆置
    Reverse(A,0,n-1,size);          //下标0~n-1的数逆置
    Reverse(A,n,m+n-1,size);        //下标n~m+n-1的数逆置 
}

int main()
{
    int a[7];
    for(int i = 0 ; i < 7 ; i++){
        a[i] = i+1;
    } 

    cout<<"对换前"<<endl;
    for(int i = 0 ; i< 7 ; i++){
        cout<<a[i]<<" ";
    }
    cout<<endl;

    Exchange(a ,3,4,7);
    cout<<"对换后"<<endl;
    for(int i = 0 ; i< 7 ; i++){
        cout<<a[i]<<" ";
    }
    cout<<endl;

    return 0;
}

这里写图片描述

1
0
查看评论

2014年计算机联考真题——带权路径长度之和

思路如下: 利用层次遍历的思路,记录每层的层数level,对于该层的每个叶节点的带权路径长度 = data*(level-1) 算法如下: //求叶子节点带权路径长度之和 int WPL(BinaryTree* T){ BinaryTree*...
  • qq_30091945
  • qq_30091945
  • 2017-08-27 13:10
  • 434

简单算法——一维数组的循环左移

给定一个有n个元素的数组,使其整体左移m位(m#include <stdio.h> #include <malloc.h> #include <stdlib.h>int main(){ int m=0,n=0,i=0,e=0; printf(&qu...
  • Panda23333
  • Panda23333
  • 2017-09-16 16:28
  • 191

2013年计算机联考真题——确定主元

思路: 首先把主元 确定为A[0],并计数cnt=1。之后从下标为1开始遍历数组, 1.如果A[i] == A[0],cnt++ 2.如果不等,则如果cnt>0,cnt–,如果cnt<0,主元设定为A[i],cnt=1。 遍历结束后,再遍历一遍,确定主元的出现的次数,大于n/2,...
  • qq_30091945
  • qq_30091945
  • 2017-08-11 19:33
  • 461

读博士的好处

1.使35岁之前成为正教授、博导成为可能 如果你只是一个本科毕业,在科研单位或大学里,工作5年后晋升中级职称,在5年晋升副高级,然后在5年晋升正高级,这其中晋级的酸甜苦辣太多太多,单位按成果排队,其中恼人的人际关系等等,最快到近四十岁才晋升到正高级,硕士毕业也如此。如果你博士毕业,再到先进的国家做...
  • liyanzhong
  • liyanzhong
  • 2014-12-14 12:26
  • 973

老机房见证90年代以来的计算机发展!

修理网络教室的垃圾电脑,就像参观博物管,整个过程似乎见证了90年代以来的计算机发展。有P3,塞扬, 毒龙,居然还有VIA C3 !昆腾850MB到20G的硬盘,ST,WD……都有。最大,最新的是WD400-LB三星、NCE、创见,HY-PC100 ECC。晕~~~ 服务器内存都来了。真是花...
  • iceashes
  • iceashes
  • 2007-01-23 16:57
  • 324

下半年计算机技术与软件专业技术资格(水平)考试成绩历年公布时间

下半年计算机技术与软件专业技术资格(水平)考试成绩历年公布时间        2012年下半年计算机技术与软件专业技术资格(水平)考试,已经顺利完成,尘埃落定。        最让考生揪心的事情,就是什么时候可...
  • littletigerat
  • littletigerat
  • 2012-11-12 14:02
  • 6341

Python序列循环移位的3种方法

第一种方法:特点是直接、容易理解,缺点是速度慢,只能实现循环左移。 def demo(lst, k):     temp = lst[:]     for i in range(k):       ...
  • qing101hua
  • qing101hua
  • 2017-10-31 17:31
  • 450

【算法】将一维数组arr中的元素循环左移p个位置

要准备考研了,现在也开始看专业课了。传统的数据结构和算法啊!现在也在看书,看一些做一些记录吧,也算是积累,不仅仅是考研,说不定以后也用的上~   今天要谈的是【将一维数组中的元素循环左移P个元素】   题目是这样的:设将n(n>1)个整数存放到一维数组R中,设计一个算法,将...
  • mgsky1
  • mgsky1
  • 2017-05-03 23:35
  • 1319

哈尔滨工业大学计算机考研854真题-哈尔滨工业大学 2017年硕士研究生入学考试试题

真题下载地址:点击打开链接 真题下载地址:http://download.csdn.net/download/jinglisen/10167590 真题下载地址:点击打开链接
  • JingLisen
  • JingLisen
  • 2017-12-20 20:43
  • 620

2014年计算机求职准备

转自:http://blog.csdn.net/walkinginthewind/article/details/13000431 找工作是一个长期准备的过程,突击是没什么效果的。准备时间越长,准备就越充分,就越容易拿到好的offer。我基本上从研究生一入学就一直在准备找工作的东西,看书、...
  • sgs1018
  • sgs1018
  • 2014-09-25 17:07
  • 403
    个人资料
    • 访问:155739次
    • 积分:4932
    • 等级:
    • 排名:第6843名
    • 原创:329篇
    • 转载:0篇
    • 译文:0篇
    • 评论:81条
    博客专栏
    最新评论