题目描述:
用户输入一个数,使26个字母排列顺序发生变化,例如
输入3:,输出结果:DEFGHIJKLMNOPQRSTUVWXYZABC
输入-3,输出结果:XYZABCDEFGHIJKLMNOPQRSTUVW
当然,这是一道很简单的题目,用双向循环链表来写确实复杂了,主要是为了练习基本功。
#include
#include
struct node
{
char alph;
struct node * prior;
struct node * next;
};
void init(node ** b)
{
*b = (node *)malloc(sizeof(node));
node * c = *b;
if(*b == NULL)
exit(0);
for(int i = 0; i < 25; i++)
{
(*b)->alph = i + 'A';
(*b)->next = (node *)malloc(sizeof(node));
(*b)->next->prior = *b;
*b = (*b)->next;
}
(*b)->alph = 'Z';
(*b)->next = c;
c->prior = *b;
}
int main(void)
{
int i, n;
while(scanf("%d", &n) != EOF)
{
node * a = NULL;
init(&a);//此时a指向最后一个
a = a->next;//指向第一个
if(n > 0)
{
for(i = 0; i < n; i++)
a = a->next;
}
else if(n < 0)
{
for(i = -n; i > 0; i--)
a = a->prior;
}
for(i = 0; i < 26; i++)
{
printf("%c", a->alph);
a = a->next;
if(i == 25)
printf("\n");
}
int cnt = 0;
while(a != NULL && cnt < 26)
{
node * p = a;
a = a->next;
free(p);
cnt++;
}
}
system("pause");
}