第1章第1节练习题8 顺序表循环移位

news/2024/5/20 8:08:24 标签: 数据结构, 算法, 顺序表

问题描述

描述1:已知在一维数组 A[m+n] 中依次存放着两个线性表 (a1,a2,a3,...,am) (b1,b2,b3,...,bn) ,试编写一个函数,将数组中两个顺序表互换,即将 (b1,b2,b3,...,bn) 放在 (a1,a2,a3,...,am) 的前面

描述2: 已知在一维数组 A[m+n] 中依次存放着两个线性表 (a1,a2,a3,...,am) (b1,b2,b3,...,bn) ,试编写一个函数将A中保存的序列循环左移m位

算法思想">算法思想

上面的两种问法最后的结果都是一样的,即将数组 (a1,a2,a3,...,am,b1,b2,b3,...,bn) 变为 (b1,b2,b3,...,bn,a1,a2,a3,...,am)
为了达到上述目的,我们可以将数组 A[m+n] 中的全部元素 (a1,a2,a3,...,am,b1,b2,b3,...,bn) 原地逆置为 (bn,bn1,bn2,...,b1,am,am1,am2,...,a1) ,再对前n个元素和后m个元素分别使用逆置算法,就可以得到 (b1,b2,b3,...,bn,a1,a2,a3,...,am) ,从而实现顺序表的位置互换

算法描述">算法描述

void Reverse(SqList *L, int left, int right, int length)
{
    ElemType temp;
    int mid;
    mid=(left+right)/2;
    for(int i=0;i<=mid-left;i++){
        temp=L->data[left+i];
        L->data[left+i]=L->data[right-i];
        L->data[right-i]=temp;
    }

}

具体代码见附件


附件

#include<stdio.h>
#define MaxSize 100
typedef int ElemType;

typedef struct{
    ElemType data[MaxSize];
    int length;
}SqList;

void Reverse(SqList*, int, int, int);
void Print(SqList*);

int main(int argc,char* argv[])
{
    SqList SL;
    SL.length=10;
    for(int i=0;i<SL.length;i++){
        SL.data[i]=i+1;
    }

    int m=3, n=SL.length-m;

    Print(&SL);
    Reverse(&SL, 0, SL.length-1, SL.length-1);
    Reverse(&SL, 0, m-1, m);
    Reverse(&SL, m, SL.length-1, n);
    Print(&SL);

    return 0;
}

void Reverse(SqList *L, int left, int right, int length)
{
    ElemType temp;
    int mid;
    mid=(left+right)/2;

    for(int i=0;i<=mid-left;i++){
        temp=L->data[left+i];
        L->data[left+i]=L->data[right-i];
        L->data[right-i]=temp;
    }

}

void Print(SqList *L){
    for(int i=0;i<L->length;i++){
        printf("%4d",L->data[i]);
    }
    printf("\n");
}

http://www.niftyadmin.cn/n/1801505.html

相关文章

无聊之胡思乱想 —— 关于CMM和CMMI

春节长假结束之后回到公司&#xff0c;我参加了有关CMMI的training。整个课程总有7个部分&#xff0c;涉及的内容十分广泛&#xff1a;从基于风险的项目管理到软件生命周期&#xff0c;再到项目计划和跟踪等等。而到上个星期为止&#xff0c;课程已经过半&#xff0c;而我对于C…

第1章第1节练习题9 查找指定值

问题描述 线性表(a1,a2,a3,...,an)中元素递增有序&#xff0c;且按顺序存储于计算机内。要求设计一算法完成用最少时间在表中查找数据值为x的元素&#xff1b;若找到&#xff0c;将其与后继元素位置交换&#xff1b;若找不到将其插入到表中&#xff0c;使表中的元素仍递增有序 …

SQL Server 中的模糊查询 LIKE

搜索条件中的模式匹配 LIKE 关键字搜索与指定模式匹配的字符串、日期或时间值。LIKE 关键字使用常规表达式包含值所要匹配的模式。模式包含要搜索的字符串&#xff0c;字符串中可包含四种通配符的任意组合。 通配符含义%包含零个或更多字符的任意字符串。_任何单个字符。[ ]指定…

第1章第1节练习题10 查找中位数

问题描述 一个长度为L(L ≥1) 的升序序列S&#xff0c;处在第 ⌜ L/2 ⌝ 个位置的数称为S的中位数。例如&#xff0c;若序列S1(11,13,15,17,19)&#xff0c;则S1的中位数是15&#xff1b; 两个序列的中位数是含它们所有元素所组成的升序序列的中位数。例如&#xff0c;若S2(2,…

Remoting技术

稍后我会将Remoting技术奉献给大家&#xff0c;让我们一起在.net技术中畅游

第1章第2节 线性表的链式表示(1)

由于顺序表的插入&#xff0c;删除操作需要移动大量的元素&#xff0c;影响了运算效率&#xff0c;由此线性表的链式存储便应运而生。链式存储线性表时&#xff0c;逻辑上连续的元素物理结构上不需要连续&#xff0c;它们彼此可以通过“链”建立起数据元素之间的逻辑关系&#…

[转]一个简单的中文分词

CLucene - a C search engine http://sourceforge.net/projects/clucene/传统的全文检索都是基于数据库的&#xff0c;Sql Server Oracle mysql 都提供全文检索&#xff0c;但这些比较大&#xff0c;不适合单机或小应用程序(Mysql4.0以上可以作为整合开发)&#xff0c;Mysql也…

第1章第2节 线性表的链式表示(2)

单链表中只有一个指向其后继结点的指针&#xff0c;使得单链表只能从前向后依次遍历&#xff0c;若要访问某个结点的前驱结点&#xff08;或插入&#xff0c;删除操作时&#xff09;&#xff0c;只能从头开始遍历&#xff0c;访问后继结点的时间复杂度为O(1)&#xff0c;而访问…