要求实现用户输入一个数改变26个字母的排列顺序
例如输入3:
DEFGHIJKLMNOPQRSTUVWXYZABC
输入-3:
XYZABCDEFGHIJKLMNOPQRSTUVW
使用循环链表
代码如下:
1 #include<stdio.h> 2 #include<stdlib.h> 3 4 #define OK 1 5 #define ERROR 0 6 7 typedef int status; 8 typedef char ElemType; 9 10 typedef struct DualNode 11 { 12 ElemType data; 13 struct DualNode *prior; 14 struct DualNode *next; 15 }DualNode,*DuLinkList; 16 17 status InitList(DuLinkList *L) 18 { 19 DualNode *p,*q; 20 int i; 21 *L=(DuLinkList)malloc(sizeof(DualNode)); 22 23 if(!(*L)) 24 return ERROR; 25 26 (*L)->next=(*L)->prior=NULL; 27 p=(*L); 28 29 for(i=0;i<26;i++) 30 { 31 q=(DualNode*)malloc(sizeof(DualNode)); 32 if(!q) 33 return ERROR; 34 35 q->data='A'+i; 36 q->prior=p; 37 q->next=p->next; 38 p->next=q; 39 40 p=q; 41 } 42 p->next=(*L)->next; 43 (*L)->next->prior=p; 44 45 return OK; 46 } 47 48 void Caesar(DuLinkList *L,int i) 49 { 50 if(i>0) 51 { 52 do 53 { 54 (*L)=(*L)->next; 55 }while(--i); 56 } 57 if(i<0) 58 { 59 (*L)=(*L)->next; 60 do 61 { 62 (*L)=(*L)->prior; 63 }while(i++); 64 } 65 } 66 67 int main() 68 { 69 DuLinkList L; 70 int i,n; 71 printf("请输入一个整数:"); 72 scanf("%d",&n); 73 74 InitList(&L); 75 Caesar(&L,n); 76 77 for(i=0;i<26;i++) 78 { 79 L=L->next; 80 printf("%c",L->data); 81 } 82 printf(" "); 83 84 return 0; 85 86 }