一、双向循环链表实践
1.题目1,要求实现用户输入一个数,使得26个字母的排列发生变化
例如用户输入3,输出结果:DEFGHIJKLMNOPQRSTUVWXYZABC
例如用户输入-3,输出结果:XYZABCDEFGHIJKLMNOPQRSTUVW
代码实现:
#include#include #include OK 1#include ERROR 0typedef char ElemType;typedef int Status;typedef struct DualNode{ ElemType data; struct DualNode *prior; struct DualNode *next;}DualNode, DualLinkList;// 初始化双循环链表Status InitList(DualLinkList *L){ DualNode *p, *q; int i; *L = (DualNode)malloc(sizeof(DualNode)); if(!(*L)){ // 创建L分配空间失败 return ERROR; } (*L)->next = (*L)->prior = NULL; p = (*L); for(i=0; i<26; i++){ 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); (*L)->next->prior = p; return OK;} void Caesar(DuLinkList *L, int i){ if(i>0){ do{ (*L) = (*L)->next; }while(--i); } if(i<0){ do{ (*L) = (*L)->next; }while(++i); }}int main(){ DuLinkList L; int i; 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;}
2.Vigenere(维吉尼亚)加密
当输入明文,自动生成随机密匙匹配明文中每个字母并移位加密。
注意:当然你的随机密匙生成后不能丢掉,丢掉了就很难把明文还原了,建议把随机密匙和密文加密存储起来。
本文为原创文章,如果对你有一点点的帮助,别忘了点赞哦!比心!如需转载,请注明出处,谢谢!