|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 qq1242009750 于 2017-12-8 15:57 编辑
步数说明图和算法思想在文章的尾部
- template <typename T1>
- void ClassWork(T1* &head, int num)
- {
- if (head == NULL)
- {
- cout << setw(10) << setfill('*') << "Error!" << endl;
- return;
- }
- T1 *tmp = head;
- num = num % 26; //计算开始的字符
- if (num < 0) //判断正负
- {
- for (int i = 25 - ((-num) + 1); i <= 25; ++i) //赋值
- {
- tmp->data = 'A' + i;
- tmp = tmp->Next;
- }
-
- //赋值前面的字母 因为前面从 num+1 开始赋值的 ,所以 只剩下 0 到 num 没有赋值
- for (int i = 0; i <= 25 - (-num); i++)
- {
- tmp->data = 'A' + i;
- tmp->Next;
- }
- }
- else
- {
- for (int i = num; i <= 25; i++) //赋值
- {
- tmp->data = 'A' + i;
- tmp = tmp->Next;
- }
- if (num != 0) //判断 num 是否为零 如是则表示 是全部赋值, 不是 则表示从 num 开始赋值
- {
- //赋值前面的字母 因为前面从num 开始赋值, 所以只剩下 0 到 num-1 没赋值
- for (int i = 0; i <= num - 1; i++)
- {
- tmp->data = 'A' + i;
- tmp = tmp->Next;
- }
- }
- }
- }
复制代码
算法思想:
1.一共有26个元素
2.字母的下标为 0 到 25
3.num%=26表示 去除环数,获取移动的步数
4.如果num为正,例如 3 则表示从第四个元素开始对链表赋值,而'A' + 3 == 'D',所以从'A' + num(因为下标从0开始,而3正好是第4个元素)开始赋值,到了'Z'后,就从'A' + 0 到 'A' + num - 1 赋值到链表
5.如果num为负,例如 -3 则表示从倒数第3个元素开始赋值 ,因为一开始就指向倒数第一个元素,所以只要走 25 -((-num)+1)次,+1表示 减去1次行走的分量, 所以从'Z' - 2 开始赋值,到了'Z',就从 'A' + 0 到 'A' + 22 赋值
以上是本人的不才之见,如有错误,请多多指出 谢谢。 |
|