双向循环链表_#include

 

 

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