您的位置:首页 > 编程语言

线性表_双向循环链表(Caesar加密变换结点顺序 代码实现 )

2017-04-27 22:37 375 查看
1.有图有真相



2.代码实现

//Caesar Password with DualLinkList

#include <stdio.h>
#include <stdlib.h>

#define OK 1
#define ERROR 0

typedef char ElemType;           //双向循环链表元素类型
typedef int  Stutas;

typedef struct DualNode
{
ElemType data;
struct DualNode *prior;    //前驱结点指针
struct DualNode *next;     //后继结点指针
}DualNode, *DualLinkList;        //结点元素 | 结点指针

/****************************************************/
/*函数名称:InitList -初始化双向循环链表               */
/*参    数:*L       -指向链表的头指针                */
/*函数功能:生成双向循环链表ABCDEFG....Z(Z指向A...)    */
/****************************************************/
Stutas InitList(DualLinkList *L) //初始化链表
{
DualNode *p, *q;           //定义循环使用的临时结点
int i;
*L = (DualLinkList)malloc(sizeof(DualNode));  //链表头指针
if (!(L))   return ERROR;
(*L)->next = (*L)->prior = NULL;
p = (*L);
for (i = 0; i < 26; i++)    //英文字母26个
{
q = (DualNode*)malloc(sizeof(DualNode));
if (!q)   return ERROR;
q->data = 'A' + i;
q->prior = p;
q->next = p->next;    //此步,q->next=NULL
p->next = q;
p = q;
}
p->next = (*L)->next;      //最后一个结点的next指向头结点的next,即指向第一个结点
(*L)->next->prior = p;     //头结点的next节点(即第一个结点)的前驱结点 指向 尾结点
return OK;
}

/****************************************************/
/*函数名称:Caesar -凯撒加密方法                      */
/*参    数:*L  -指向链表的头指针                     */
/*         i-链表的头指针指向的位置,即作为首节点的标号 */
/*函数功能:移动结点位置,以指定位置结点作为首结点      */
/*         如:i=3时,ABCD...Z变成 DEF...ZABC        */
/*         即原来A位置元素变成D,B变成E...Z变成C       */
/****************************************************/
void Caesar(DualLinkList *L, int i)
{
if (i > 0)
{
do
{
(*L) = (*L)->next;
} while (--i);
}
if (i < 0)
{
do
{
(*L) = (*L)->next;
} while (++i);
}

}

int main()
{
DualLinkList L;             //定义双向循环链表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);
}
return 0;
}

3.测试结果




内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息