#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; } }