使用双向循环链表储存A~Z,并根据输入的值进行打印顺序的调整。例如输入3,打印D~Z~C,输入-3打印X~A~W
#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
char data;
struct node * next;
struct node * piror;
}*linklist;
linklist Create_Circle(void)
{
linklist Headnode;
linklist s,p;
char ch = 'A';
if((Headnode = (linklist)malloc(sizeof(struct node))) == NULL)
{
return NULL;
}
Headnode->next = Headnode->piror = NULL; //创建一个表头
p = Headnode;
for(ch = 'A'; ch <= 'Z'; ch++)
{
if((s = (linklist)malloc(sizeof(struct node))) == NULL)
{
return NULL;
}
s->data = ch;
s->piror = p; //创建循环链表的三个步骤
s->next = p->next;
p->next = s;
p = s;
}
s->next = Headnode->next; //创建结束之后首位相连
Headnode->next->piror = s;
Headnode->next = NULL;
free(Headnode); //释放空表头
return s->next; //返回指向链表第一个节点的指针
}
void Print_List(linklist Headnode, int num)
{
int i= 1;
if(num > 0)
{
for(i = 0; i < num; i++)
Headnode = Headnode->next;
}
else
{
for(i = 0; i < -num; i++)
Headnode = Headnode->piror;
}
i = 1;
while(i <= 26)
{
printf("\t%c",Headnode->data);
Headnode = Headnode->next;
i++;
}
puts("");
}
int main(void)
{
linklist Headnode;
Headnode = Create_Circle();
Print_List(Headnode, -3);
puts("");
return 0;
}