数据结构--双向循环链表实践

来源:互联网 发布:传奇盗号软件 编辑:程序博客网 时间:2024/06/03 06:46

问题描述:

要求实现用户输入一个数使得26个字母的排列发生变化,例如用户输入3,输出结果:

DEFGHIJKLMNOPQRSTUVWXYZABC

同时需要支持负数,例如用户输入-3,输出结果:

XYZABCDEFGHIJKLMNOPQRSTUVW

#include <stdio.h>#include <stdlib.h>#define OK 1#define ERROR 0typedef char ElemType;typedef int  status;/*定义双向链表,前驱和后继*/typedef struct DualNode{ElemType data;struct DualNode *prior;struct DualNode *next;}DualNode,*DuLinkList;/*链表初始化*/status InitList(DuLinkList *L){DualNode *p,*q;int i;*L = (DuLinkList)malloc(sizeof(DualNode));if (!(*L)){return ERROR;}(*L)->next = (*L)->prior = NULL;p = (*L);//头结点for (i = 0; i < 26; i++)//p,q交替,实现初始化{q = (DualNode *)malloc(sizeof(DualNode));if (!q){return ERROR;}q->data = 'A'+i;q->prior = p;q->next = p->next;p->next = q;p = q;}p->next = (*L)->next;(*L)->next->prior = p;return 0;}void Caesar(DuLinkList *L, int i){if (i > 0){do{(*L) = (*L)->next;} while ( --i );}if (i < 0){(*L) = (*L)->next;do{(*L) = (*L)->prior;} while ( i++);}}int main(){DuLinkList L;int i,n;InitList(&L);printf("请输入一个整数:");scanf("%d", &n);printf("\n");Caesar(&L, n);for (i = 0; i < 26; i++){L = L->next;printf("%c", L->data);}printf("\n");return 0;}


原创粉丝点击