开头絮絮叨叨

最近在学树的结构,有点头大。
据说程序员特别喜欢在树上荡来荡去
感觉前面的链表结构是后面各种胡里花哨结构的基础,因此最近也打算回头看看老师当时布置的一些附加题。当时由于上机作业任务繁重,都没来得及好好看。
从这篇文章开始会陆续写一写之前的附加题目作为对知识的巩固和拓展,也希望大家多多支持。
我才不会透露我主要目的是复习数据结构然后期末拿高分

进入正题

已知某顺序结构线性表的结构如下:

  struct List{int data[MAXLENGTH];int length;};

请编写算法,将表中的元素向右移n位,表尾元素移至表头。 例如,原表为(1,2,3,4,5),则将其右移3位后得到表(3,4,5,1,2)

思路:将表中元素存储到一个数组当中,可以将数组中的元素赋值给顺序表中的元素。

#include <bits/stdc++.h>
using namespace std;#define MAXLENGTH 100//线性表的结构
typedef struct List
{int data[MAXLENGTH];int length;
}List;//初始化表
void InitList(List &L)
{for(int i=0;i<MAXLENGTH;i ++)L.data[i] = 0;L.length = 0;
}//创造一个顺序表
void CreateList(List &L, int len)
{L.length = len;int x;for(int i=0;i<L.length;i ++)  cin >> L.data[i];
}//移动数字
int MoveList(List &L, int n)
{if(n>=L.length)return 0;int a[L.length];for(int i=0;i<L.length;i ++)a[i] = L.data[i];for(int i=0;i<L.length;i ++)L.data[(i+n)%L.length] = a[i];return 1;
}//打印顺序表中的数据
void PrintList(List L)
{for(int i=0;i<L.length;i ++)cout << L.data[i] << " " ;cout << endl;
}//主函数
int main ()
{List L;int len;InitList (L);cout << "请输入表的长度" << endl;cin >>len;cout << "创建您的顺序表,请依次输入数据" << endl;CreateList(L,len);cout << "请输入移动位数" << endl;int n;cin >> n;cout << "正在移动" << endl;if(MoveList(L,n))cout << "移动成功" << endl;elsecout << "移动失败" << endl;cout << "打印移动后的顺序表" << endl;if(L.length == 0) cout << "表为空" << endl;else PrintList(L);return 0;
}

输出结果截图:

扩展思维

接着是采用静态链表结构来完成上述要求。

分析:静态链表不同的一点是采用结点来存储数据,这时就不能像上面一样的顺序存储一样直接用数组元素对应的方式来完成。但是考虑到我们有指针,所以思路也比较清晰。因此设置一个存储数组的思路仍然可行,接下来就只剩指针移动的问题了。我采用的是单链表存储结构。

#include<bits/stdc++.h>
using namespace std;typedef struct Node
{int data;struct Node *next;
}Node, *LinkedList;//初始化
void InitLinkedList(LinkedList &L)
{L = (Node *)malloc(sizeof(Node));if(L == NULL) cout << "申请失败" << endl;L->next = NULL;
}//头插法,n为插入元素数量
void CreateLinkedListHead(LinkedList &L, int n)
{int x;L = (Node*)malloc(sizeof(Node));L->next = NULL;cout << "请输入你要插入的元素" << endl;for(int i=0;i<n;i ++){Node *p;p = (Node*)malloc(sizeof(Node));cin >> x;p->data = x;p->next = L->next;L->next = p;}cout << "完成插入" << endl;
}   //尾插法
void CreateLinkedListTail(LinkedList &L, int n)
{int x;L = (Node *)malloc(sizeof(Node));L->next = NULL;Node *r;r = (Node *)malloc(sizeof(Node));r = L;cout << "请输入你要插入的元素" << endl;while(n --){Node *p = (Node *)malloc(sizeof(Node));cin >> x;p->data = x;r->next = p;r = p;}r->next = NULL;cout << "完成插入" << endl;
}//打印
void Print(LinkedList L)
{Node *p;for(p = L->next;p != NULL;p = p->next)cout << p->data << " ";cout << endl;
}//移动,num为移动位数
void MoveLinkedList(LinkedList &L, int num, int n)
{Node *p = (Node *)malloc(sizeof(Node));p = L->next;cout << "移动前链表为:" << endl;Print(L);int temp[n];for(int i=0;i<n;i ++){ temp[i] = p->data;p = p->next;}p = L->next;for(int i=0;i<n;i ++){p->data = temp[(i+num)%n];p = p->next;}cout << "移位后链表为" << endl;Print(L);
}int main ()
{cout << "初始化链表" << endl;LinkedList L;InitLinkedList (L);cout << "如果用头插法请输入0,尾插法输入非零数" << endl;int bol;cin >> bol;cout << "请输入你要插入的元素个数" << endl;int n;cin >> n;if(bol == 0)  CreateLinkedListHead(L,n);else CreateLinkedListTail(L,n);int num;cout << "请输入你要移动的位数" << endl;cin >> num;MoveLinkedList(L,num,n);cout << "谢谢使用" << endl;return 0;
}

输出结果截图

以上是这篇博客的内容。

下一篇博客预计会写
1.双向链表第n位的前驱和后继
2.约瑟夫环的问题

C++数据结构问题:线性表的数据元素右移相关推荐

  1. 【Java数据结构】线性表

    线性表 线性表是最基本.最简单.也是最常用的一种数据结构. 线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的(注意,这句话只适用大部分线性表,而 ...

  2. 数据结构:线性表(java实现)

    点个赞,看一看,好习惯!本文 GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了 3 个月总结的一线大厂 Java 面试总结,本 ...

  3. java 线性表定义_Java数据结构的线性表是怎样的

    Java数据结构--线性表的顺序存储实现 一.描述 线性结构特点: (1)存在唯一的一个被称作"第一个"的数据元素 (2)存在唯一的一个被称作"最后一个"的数据 ...

  4. 【数据结构】线性表(一):顺序列表

    线性表(linear_list)是最常用且最简单的一种数据结构,简言之,一个线性表是n个数据元素的有序序列. 例如:(a1 , ... , ai-1 , ai , ai+1 , ... , an):a ...

  5. 【Java】 大话数据结构(1) 线性表之顺序存储结构

     本文根据<大话数据结构>一书,实现了Java版的顺序存储结构. 顺序存储结构指的是用一段地址连续的存储单元一次存储线性表的数据元素,一般用一维数组来实现. 书中的线性表抽象数据类型定义如 ...

  6. 用Java描述数据结构之线性表的顺序存储(顺序表),ArrayList及其方法的介绍

    我们先来想一想什么是线性表? 线性表是最基本.最简单.也是最常用的一种数据结构.线性表(linear list)是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列. 线性表中数据元素之 ...

  7. 数据结构之线性表之顺序存储结构(3)

    1 前言 经过前两张的理论基础,我相信大家都能简单的明白了数据结构和算法一些常用的概念了,从今天开始我们开始学习数据结构中线性表,一起叩响数据结构的大门. 2 详述 线性表(List):零个或者多个数 ...

  8. 数据结构之线性表----一文看懂顺序表、单链表、双链表、循环链表

    ​ 线性表是数据结构中比较基础的内容,不过也是入门的所需要客服的第一个难关.因为从这里开始,就需要我们动手编程,这就对很多同学的动手能力提出了挑战.不过这些都是我们需要克服的阵痛,学习新的知识总是痛苦 ...

  9. 数据结构之线性表(顺序表和链表)

    线性表 首先线性表的定义就是:零个或多个数据元素的有限序列. 列如高考前每个班级排队照准考证,这个队伍就可以看做一个线性表,大家都井然有序的排着队,是一个有限的序列,一个班就那么几十个人,而且每个人之 ...

最新文章

  1. 前端面试之Vue向技巧总结
  2. 关于机器学习的领悟与反思
  3. 一篇文章搞定百度OCR图片文字识别API
  4. python源码文件以什么格式结尾结尾_查看python源码,发现里面的函数都以pass结尾,那么意义何在?...
  5. DFS破解“迷宫问题”(洛谷P1605题题解,Java语言描述)
  6. 推荐一些数据挖掘和生信友好的SCI!
  7. 解决npm安装时出现run `npm audit fix` to fix them, or `npm audit` for details
  8. arm 饱和指令_ARM Neon 指令 解释
  9. 高级软考之——系统分析师思维导图(一)
  10. 获取三角形外接圆的圆心坐标、半径
  11. 《数字图像处理 第三版》(冈萨雷斯)——第十二章 目标识别
  12. python简单地实现几个小代码
  13. wordpress字体_如何在WordPress中使用网络字体
  14. 鸟哥的linux网络基础,鸟哥的 Linux 私房菜 -- 基础网络概念.pdf
  15. ssh连不上虚拟机上linux,ssh工具连接不上 vmware linux虚拟机的处理
  16. 纯JS实现倒序九九乘法表 for循环
  17. 一分钟教你搞定chrome的安装---redhat7.6如何安装谷歌浏览器
  18. 实用的配音软件推荐,确定不来看看?
  19. 计算机的录像功能在哪里找,电脑录像功能在哪
  20. layui表格(table)排序

热门文章

  1. golang profiling
  2. codeforces 821 B Okabe and Banana Trees
  3. 怎么把文件发给商家打印?如何给商家发送需打印的文件
  4. oracle 文本转数字,Oracle:需要将数值转换为文本并保留 - 已解决
  5. matlab mafdr,matlab FDR校正
  6. jupyter notebook 中运行from scipy import stats之后报错FutureWarning:
  7. 小程序 和 web 功能对比_小程序官方推出的Kbone,是如何解决Web 端和小程序同构痛点的?...
  8. 人像修图怎么修脸部瑕疵
  9. 2023最新大数据毕设题目推荐100例
  10. CodeForces 757 E.Bash Plays with Functions(积性函数+dp)