首页 > 其他 > 详细

双向循环链表

时间:2021-08-14 23:42:20      阅读:40      评论:0      收藏:0      [点我收藏+]

 

技术分享图片

 

 

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

 

双向循环链表

原文:https://www.cnblogs.com/sushang/p/15141926.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!