• D : DS 顺序表之循环移位


    Description

    顺序表的移位是循环移位,例如顺序表: 1 2 3 4 5 6 。如果左移 1 位,即原
    来的头元素移动到末尾,其它元素向左移 1 位,变成 2 3 4 5 6 1 。同理,
    如果右移 1 位,即原来的尾元素移动到头,其它元素向右移 1 位,变成 6 1 2
    3 4 5 。以下是移位的多个例子:
    原数据: 1 2 3 4 5 6
    左移 3 位: 4 5 6 1 2 3 ,与原数据对比
    右移 4 位: 3 4 5 6 1 2 ,与原数据对比
    请编写程序实现顺序表的循环移位操作

    Input

    1 行输入 n 表示顺序表包含的 n 个数据
    2 行输入 n 个数据,数据是小于 100 的正整数
    3 行输入移动方向和移动的位数,左移方向为 0 ,右移方向为 1
    4 行输入移动方向和移动的位数,左移方向为 0 ,右移方向为 1
    注意:移动操作是针对上一次移动后的结果进行的

    Output

    第一行输出创建后,顺序表内的所有数据,数据之间用空格隔开
    第二行输出第一次移位操作后,顺序表内的所有数据,数据之间用空格隔开
    第三行输出第二次移位操作后,顺序表内的所有数据,数据之间用空格隔开

    Sample Input

    5
    11 22 33 44 55
    0 2
    1 4

    Sample Output

    11 22 33 44 55
    33 44 55 11 22
    44 55 11 22 33

     思路:

    在move函数里,用dir参数(0和1)区分向左移还是向右移,step表示移动位数。

    左移:用变量t保存第一个数据,然后while中循环一次,就将第一个数后的数据都左移一位,再将t赋值给顺序表最后一位。

    右移:先将顺序表整体位移step位,然后将超出顺序表的数据移动到前面空缺的位置。

     AC代码:

    1. #include
    2. using namespace std;
    3. #define ok 0
    4. #define error -1
    5. class SeqList {
    6. private:
    7. int* list;
    8. int maxsize;
    9. int size;
    10. public:
    11. SeqList() {
    12. maxsize = 1000;
    13. size = 0;
    14. list = new int[maxsize];
    15. }
    16. ~SeqList() {
    17. delete[]list;
    18. }
    19. void set(int length) {
    20. this->size = length;
    21. for (int i = 0; i < length; i++) {
    22. cin >> *(list + i);
    23. }//初始化数组
    24. list_display();
    25. }
    26. void list_display() {
    27. for (int i = 0; i < size; i++) {
    28. cout << list[i];
    29. if (i != size - 1) {
    30. cout << " ";
    31. }
    32. }
    33. cout << endl;
    34. }
    35. void list_display2() {
    36. for (int i = 0; i < size; i++) {
    37. cout << list[i];
    38. if (i != size - 1) {
    39. cout << " ";
    40. }
    41. }
    42. }
    43. void move(int dir, int step) {
    44. if (dir == 0) {
    45. while (step--) {
    46. int t = 0;
    47. t = *(list);
    48. for (int i = 1; i < size; i++) {
    49. *(list + i - 1) = *(list + i);
    50. }
    51. *(list + size - 1) = t;
    52. }
    53. }
    54. else {
    55. for (int i = size; i >= 0; i--) {
    56. *(list + i + step) = *(list + i);
    57. }
    58. for (int i = 0; i < step; i++) {
    59. *(list + i) = *(list + i + size);
    60. }
    61. }
    62. }
    63. };
    64. int main() {
    65. int t;
    66. cin >> t;
    67. SeqList p;
    68. p.set(t);
    69. int d, s;
    70. cin >> d >> s;
    71. p.move(d, s);
    72. p.list_display();
    73. cin >> d >> s;
    74. p.move(d, s);
    75. p.list_display2();
    76. }

  • 相关阅读:
    Codeforces Round #805 (Div. 3)总结
    【C++11】lambda表达式
    【Pytorch深度学习实战】(9)神经语言模型(RNN-LM)
    信道状态信息(CSI)共轭相乘去噪法
    轮足机器人硬件总结
    设计模式的七大原则
    如何导出PPT画的图为高清图片?插入到world后不压缩图像的设置方法?
    手动处理 Sharding DDL Lock
    OpenGL 着色器使用
    E. Cross Swapping(并查集变形/好题)
  • 原文地址:https://blog.csdn.net/weixin_73609038/article/details/133282825