#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <stdbool.h>
#include <math.h>
#include <string.h>
#include "time.h"
typedef char Elemtype;
typedef int Status;
typedef struct Dualnode
{
Elemtype data;
struct Dualnode* next;
struct Dualnode* prior;
}DualNode;
typedef struct Dualnode* LinkDualList;
void caesar(LinkDualList *DL,int n);
Status InitDualList(LinkDualList *DL);
int main(void)
{
LinkDualList DL;
int i,n;
InitDualList(&DL);
printf("请输入一个整数:\n");
scanf("%d",&n);
printf("\n");
caesar(&DL,n);
for(i=0;i<26;i++)
{
DL = DL->next;
printf("%c ",DL->data);
}
printf("\n");
return 0;
}
Status InitDualList(LinkDualList *DL)
{
DualNode *temp0,*temp1;
int i;
*DL = (LinkDualList)malloc(sizeof(DualNode));
if(!(*DL))
{
return 1;
}
(*DL)->prior = (*DL)->next = NULL;
temp0 = (*DL);//头结点
for(i = 0 ; i < 26 ; i++)
{
temp1 = (LinkDualList)malloc(sizeof(DualNode));
temp1->data = 65 + i ;
temp0->next = temp1;
temp1->prior = temp0;
temp1->next = temp0->next;//等价于=NULL,更灵活
temp0 = temp1;
}
(*DL)->next->prior = temp0;//头的前驱指向末尾
temp0->next = (*DL)->next;//末尾的后驱指向头
return 0;
}
void caesar(LinkDualList *DL,int n)
{
if(n > 0)
{
do
{
(*DL) = (*DL)->next;
}while(--n);
}
if(n < 0)
{
n=n-1;
(*DL) = (*DL)->next;
do
{
(*DL) = (*DL)->prior;
}while(++n);
}
}
双向链表练习(凯撒密码)
最新推荐文章于 2024-04-16 13:37:19 发布