顺序表应用4-2:元素位置互换之逆置算法(数据改进)
来源:互联网 发布:淘宝二手镜头店铺推荐 编辑:程序博客网 时间:2024/05/29 19:08
Problem Description
一个长度为len(1<=len<=1000000)的顺序表,数据元素的类型为整型,将该表分成两半,前一半有m个元素,后一半有len-m个元素(1<=m<=len),设计一个时间复杂度为O(N)、空间复杂度为O(1)的算法,改变原来的顺序表,把顺序表中原来在前的m个元素放到表的后段,后len-m个元素放到表的前段。
注意:交换操作会有多次,每次交换都是在上次交换完成后的顺序表中进行。
Input
第一行输入整数len(1<=len<=1000000),表示顺序表元素的总数;
第二行输入len个整数,作为表里依次存放的数据元素;
第三行输入整数t(1<=t<=30),表示之后要完成t次交换,每次均是在上次交换完成后的顺序表基础上实现新的交换;
之后t行,每行输入一个整数m(1<=m<=len),代表本次交换要以上次交换完成后的顺序表为基础,实现前m个元素与后len-m个元素的交换;
Output
输出一共t行,每行依次输出本次交换完成后顺序表里所有元素。
Example Input
101 2 3 4 5 6 7 8 9 -13235
Example Output
3 4 5 6 7 8 9 -1 1 26 7 8 9 -1 1 2 3 4 51 2 3 4 5 6 7 8 9 -1
#include<stdio.h>#include<string.h>#include<stdlib.h>#define INITLISTSIZE 1000000#define INCREMENT 10#define OVERFLOW -2#define ERROR -1#define OK 1typedef int Elemtype;typedef int Statu;int m;typedef struct node{ Elemtype *elem; int length; int listsize;} Sqlist;Statu Initlist(Sqlist &L);Statu Insertlist(Sqlist &L, int i, int e);Statu Dellist(Sqlist &L, int i);int Search(Sqlist L, int e, int j);Statu Changelist(Sqlist &L, int s, int k);Statu Prelist(Sqlist L);Statu Destroylist(Sqlist &L);int main(){ int n, i, j; Sqlist L; Initlist(L); scanf("%d", &j); for(i = 0; i < j; i++) { int k; scanf("%d", &k); Insertlist(L, i + 1, k); } scanf("%d", &n); while(n--) { scanf("%d", &m); Changelist(L, 0, L.length); Changelist(L, 0, L.length - m); Changelist(L, L.length - m, L.length); Prelist(L); } Destroylist(L);}Statu Initlist(Sqlist &L){ L.elem = (Elemtype *)malloc(INITLISTSIZE * sizeof(Elemtype)); if(!L.elem) return OVERFLOW; L.length = 0; L.listsize = INITLISTSIZE; return OK;}Statu Insertlist(Sqlist &L, int i, int e){ if(i < 1 || i > L.length + 1) return ERROR; if(L.length >= L.listsize) { L.elem = (Elemtype *)realloc(L.elem, (L.listsize + INCREMENT) * sizeof(Elemtype)); if(!L.elem) return OVERFLOW; L.listsize += INCREMENT; } for(int j = L.length; j >= i; j--) L.elem[j] = L.elem[j - 1]; L.elem[i - 1] = e; ++L.length; return OK;}Statu Dellist(Sqlist &L, int i){ if(i < 1 || i > L.length) return OVERFLOW; for(int j = i - 1; j < L.length; j++) L.elem[j] = L.elem[j + 1]; --L.length; return OK;}int Search(Sqlist L, int e, int j){ for(int i = 0; i < j; i++) { if(L.elem[i] == e) { return i; } } return -1;}Statu Changelist(Sqlist &L, int s, int k){ int t; for(int i = 0; i < (k - s)/2; i++) { t = L.elem[i + s]; L.elem[i + s] = L.elem[k - i - 1]; L.elem[k - i - 1] = t; } return OK;}Statu Prelist(Sqlist L){ for(int i = 0; i < L.length; i++) { printf("%d%c", L.elem[i], i == L.length - 1 ? '\n' : ' '); } return OK;}Statu Destroylist(Sqlist &L){ if(L.elem) { free(L.elem); L.length = 0; L.listsize = 0; } else return ERROR; return OK;}
阅读全文
0 0
- 顺序表应用4-2:元素位置互换之逆置算法(数据改进)
- 顺序表应用4-2:元素位置互换之逆置算法(数据改进)
- 顺序表应用4-2:元素位置互换之逆置算法(数据改进)
- 顺序表应用4-2:元素位置互换之逆置算法(数据改进)
- 顺序表应用4-2:元素位置互换之逆置算法(数据改进)
- 顺序表应用4-2:元素位置互换之逆置算法(数据改进)
- 顺序表应用4-2:元素位置互换之逆置算法(数据改进)
- 顺序表应用4-2:元素位置互换之逆置算法(数据改进)
- 顺序表应用4-2:元素位置互换之逆置算法(数据改进)
- 3663顺序表应用4-2:元素位置互换之逆置算法(数据改进)
- 顺序表应用4-2:元素位置互换之逆置算法(数据改进)
- 顺序表应用4-2:元素位置互换之逆置算法(数据改进)
- 顺序表应用4-2:元素位置互换之逆置算法(数据改进)
- 顺序表应用4-2:元素位置互换之逆置算法(数据改进)
- SDUTACM 顺序表应用4-2:元素位置互换之逆置算法(数据改进)
- 顺序表应用4-2:元素位置互换之逆置算法(数据改进)
- 顺序表应用4-2:元素位置互换之逆置算法(数据改进)
- 顺序表应用4-2:元素位置互换之逆置算法(数据改进)
- C++模版typename的双重意义
- BZOJ1597(Usaco2008 Mar)[土地购买]--斜率优化DP
- Linux的截取字符:%#:
- MyEclipse快捷键的使用
- STM32中的程序在RAM还是FLASH里运行?
- 顺序表应用4-2:元素位置互换之逆置算法(数据改进)
- LeetCode 329. Longest Increasing Path in a Matrix
- Nexus Repository Manager 3 installing with Docker
- 集合collection
- 62.Scala中上下文界定内幕中的隐式参数与隐式参数的实战详解及其在Spark中的应用源码解析
- 用递归方法求数组的最大值
- Pycharm上安装tensorflow的方法
- 【矩阵快速幂+输入终止条件判断】Contemplation! Algebra UVA
- HTTP协议浅谈(一)之TCP长连接