![]()
#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
typedef int Status;
typedef char ElemType;
typedef struct Node{
ElemType data;
struct Node *Prior;
struct Node *Next;
}DualNode,*DuLinkList;
Status InitList(DuLinkList *L){
int i;
DuLinkList p,q;
*L=(DuLinkList)malloc(sizeof(DualNode));
if(!*L)
return ERROR;
(*L)->Prior=(*L)->Next=NULL;
p=*L;
for(i=0;i<26;i++){
q=(DuLinkList)malloc(sizeof(DualNode));
if(!p)
return ERROR;
q->data='A'+i;
q->Next=p->Next;
q->Prior=p;
p->Next=q;
p=q;
}
p->Next=(*L)->Next;
(*L)->Next->Prior=p;
*L=(*L)->Next;
return OK;
}
void Caesar(DuLinkList *L,int i){
if(i>0){
while(i--){
*L=(*L)->Next;
}
}
else{
while(i++){
*L=(*L)->Prior;
}
}
}
Status Insert(DuLinkList *L,int i,ElemType c){
if(i<0) return ERROR;
if(i==1) i++;
i-=2;
DuLinkList p,q;
while(i--){
*L=(*L)->Next;
}
q=*L;
p=(DuLinkList)malloc(sizeof(DualNode));
if(!p) return ERROR;
p->data=c;
p->Next=q->Next;
p->Prior=q;
q->Next->Prior=p;
q->Next=p;
return OK;
}
void Delete(DuLinkList *L,int i){
i--;
DuLinkList q=*L;
while(i--){
q=q->Next;
}
*L=q->Next;
q->Next->Prior=q->Prior;
q->Prior->Next=q->Next;
}
int main(){
int i,n;
DuLinkList L;
if(!InitList(&L))
return 0;
printf("请输入数字:\n");
scanf("%d",&n);
Caesar(&L,n);
if(!Insert(&L,2,'c')) return 0;
Delete(&L,1);
for(i=0;i<26;i++){
printf("%c ",L->data);
L=L->Next;
}
}