/* 实现26个英文字母的左右移位 */ #include<stdio.h> #include<stdlib.h> typedef struct node { char data; struct node *prior; struct node *next; }Node, *DualCirLink; DualCirLink CreatLink() { DualCirLink l = (DualCirLink)malloc(sizeof(Node)); l -> next = l; l -> prior = l; l -> data = 'a'; DualCirLink p, q; q = l; for( int i=1; i<26; i++ ) { p = (DualCirLink)malloc(sizeof(Node)); p -> data = 'a' + i; p -> prior = q; q -> next = p; q = p; q -> next = l; l -> prior = q; } return l; } DualCirLink ShiftLink( DualCirLink l , int n ) { DualCirLink p = l; int i; if( n>0 ) for( i=0; i<n; i++ ) p = p -> next; else for( i=0; i<(-n); i++ ) p = p -> prior; return p; } void ShowLink( DualCirLink l ) { DualCirLink p = l; while( p->next != l ) { printf("%c ", p->data); p = p -> next; } printf("%c\n", p->data); } void DeleteLink( DualCirLink l ) { DualCirLink p, q; p = q = l->next; while( p != l ) { p = q->next; free(q); q = p; } free(p); } void main() { DualCirLink l = CreatLink(); ShowLink( l ); DualCirLink p; int n; printf("请输入移位的位数: "); scanf("%d", &n); p = ShiftLink( l, n ); ShowLink( p ); DeleteLink ( p ); }