数据结构学习-数组A[m+n]中依次存放两个线性表(a1,a2···am),(b1,b2···bn),将两个顺序表位置互换

将数组中的两个顺序表位置互换,即将(b1,b2···bn)放到(a1,a2···am)前边。

解法一:

将数组中的全部元素(a1,a2,···am,b1,b2,···bn)原地逆置为(bn,bn-1,···b1,am,am-1···a1),再对前n个元素和后m个元素分别逆置,得到(b1,b2···bn,a1,a2···am),从而实现位置互换。

代码:

void Reverse(int a[],int left,int right,int arraySize)
{//逆转(aleft,aleft+1,aleft+2···,aright)为(aright,aright-1,···,aleft)
    if(left>=right||right>=arrySize)
      return;
    int mid=(left+right)/2;
    for(int i=0;i<=mid-left;i++)
    {
        int temp=A[left+i];
        A[left+i]=A[right-i];
        A[right-i]=temp;
    }
}        

void Exchange(int A[],int m,int n,int arraySize)
{
  Reverse(A,0,m+n-1,arrySize);
  Reverse(A,0,n-1,arrySize);
  Reverse(A,n,m+n-1,arrySize);
}

解法二:

借助辅助数组实现。

创建大小m的数组S,将A中前m个整数依次暂存在S中,同时将A中后n个元素左移,再将S中暂存的依次放回A中的后续单元。

void Exchange(int A[],int m,int n)

{

  int S[m],i;
  for(i=0;i<m;i++)//将前m个暂存至S
      S[i]=A[i];
  for(i=0;i<n;i++)//将后n个移到前面
    A[i]=A[m+i];
  for(i=0;i<m;i++)//将S中暂存的依次插入后面
    A[n+i]=S[i];
}

原文地址:https://www.cnblogs.com/wyloving/p/8290047.html

时间: 2024-11-09 00:41:02

数据结构学习-数组A[m+n]中依次存放两个线性表(a1,a2···am),(b1,b2···bn),将两个顺序表位置互换的相关文章

C++的标准模板库STL中实现的数据结构之顺序表vector的分析与使用

摘要 本文主要借助对C++的标准模板库STL中实现的数据结构的学习和使用来加深对数据结构的理解.即联系数据结构的理论分析和详细的应用实现(STL),本文是系列总结的第一篇,主要针对线性表中的顺序表(动态数组)STL vector进行分析和总结. 引言 因为前段时间对台大的机器学习基石和技法课程进行了学习,发如今详细的实现中经常涉及到各种类型的数据结构,比方线性表.二叉树.图等,在使用这些数据结构时感到有些吃力.主要是对一些主要的数据结构理解的不够.所以趁着暑假假期.近期一段时间总会抽出时间复习一

小猪的数据结构学习笔记(三)

小猪的数据结构学习笔记(三) 线性表之单链表 本章引言: 上一节中我们见识了第一个数据结构--线性表中的顺序表; 当你把操作的代码自己写几遍就会有点感觉了,如果现在让你写顺序表的 插入算法,你能够想出大概的代码么?如果可以,那么你就可以进入新的章节了; 否则,还是回头看看吧!在本节,我们将迎来线性表的链式表示--单链表 单链表和顺序表有什么优势和劣势呢?单链表的头插法和尾插法有什么不同呢? 请大家跟随笔者的脚步来解析线性表中的单链表把! 本节学习路线图 路线图解析: ①先要理解顺序表和单链表各自

数据结构学习总结(1)线性表之顺序表

通过前面的学习知道,具有“一对一”逻辑关系的数据,最佳的存储方式是使用线性表.那么,什么是线性表呢? 线性表,全名为线性存储结构.使用线性表存储数据的方式可以这样理解,即“把所有数据用一根线儿串起来,再存储到物理空间中”. 采用线性表将其储存到物理空间中. 首先,用“一根线儿”把它们按照顺序“串”起来,如图 2 所示:                                                             图 2 数据的"线性"结构 图 2 中,左侧是“

数据结构学习总结 栈和队列

一,顺序栈的基本操作 同顺序表和链表一样,栈也是用来存储逻辑关系为 "一对一" 数据的线性存储结构,如图 1 所示.                                                               图 1 栈存储结构示意图 从图 1 我们看到,栈存储结构与之前所学的线性存储结构有所差异,这缘于栈对数据 "存" 和 "取" 的过程有特殊的要求: 1,栈只能从表的一端存取数据,另一端是封闭的,如图 1 所示

数据结构学习日记2:实现一个简单的线性表功能(链式存储方式)

数据结构学习日记,此次是用链表来实现一个线性表的功能 // ListTable1.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> using namespace std; #define ERROR 0; #define OK 1; typedef int Status; typedef int ElemType; //声明一个节点 typedef struct Node { ElemType d

C++ 数据结构学习一(顺序表)

//sequentiallist.h 顺序表模板类 #ifndef SEQUENTIAL_LIST_HXX#define SEQUENTIAL_LIST_HXX using std::cout; using std::endl; const int MaxSize=100; //顺序表数组最大值 template<class T>class SeqList //定义模板类SeqList(顺序表){ public: SeqList() { length=0; } //无参构造函数,建立一个空的顺

数据结构与算法学习 第1季01 顺序表 链表

2015年学习计划安排: http://www.cnblogs.com/cyrus-ho/p/4182275.html 顺序表:顺序存储结构的线性表.所谓顺序存储结构,就是指用一组连续地址的内存单元来存储整张线性表的存储结构.(因此按序遍历数据很方便,直接做指针偏移就可以了.) 常用操作 A)向顺序表中第i个位置插入元素item 1. 判断插入位置是否合法 2. 将i-1以后的元素后移一个元素的位置(注意静态顺序表和动态顺序表的差异)--- 从原来最后一个元素开始操作到原来的第i个元素,依次后移

java数据结构与算法之顺序表与链表深入分析

转载请注明出处(万分感谢!): http://blog.csdn.net/javazejian/article/details/52953190 出自[zejian的博客] 关联文章: java数据结构与算法之顺序表与链表设计与实现分析 java数据结构与算法之双链表设计与实现 ??数据结构与算法这门学科虽然在大学期间就已学习过了,但是到现在确实也忘了不少,因此最近又重新看了本书-<数据结构与算法分析>加上之前看的<java数据结构>也算是对数据结构的进一步深入学习了,于是也就打算

顺序表中基本操作

前言:最近玩esp8266和ucos-iii以及在学c++比较多,接触的大部分都是指针.结构体.链表:刚好自己又在看数据结构(数据结构真的非常重要,要好好学,是学算法的敲门砖,哈哈哈),个人看法在对顺序表进行元素增和删操作,效率比较低(要移动非常多的其他元素),而我之前写的对链表操作,使用指针操作,效率就高多了.好了,来看今天的学习总结吧! 一.顺序表的初始化: 算法步骤: 1.为顺序表L动态分配一个预定义大小的数组空间,使elem指向这段空间的基地址 2.将表的当前长度设为0 伪代码实现: S