栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言实现双向巡回链表

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言实现双向巡回链表

主要利用双向链表实现26个英文字母的循环输出

例如输入3,输入结果:

DEFGHIJKLMNOPQRSTUVWXYZABC

输入-3,则输出结果:

XYZABCDEFGHIJKLMNOPQRSTUVW

#include 
#include 
#define OK 1
#define ERROR 0


typedef char Elemtype;
typedef int Status;

typedef struct Node{
    Elemtype data;
    struct Node *prior;
    struct Node *next;
}Node,*linked;

Status InitList(linked *L){//初始化链表
    Node *p,*q;
    int i;
    *L = (linked)malloc(sizeof(Node));//生成一个指向头结点的指针
    if(!(*L)){
        return ERROR;
    }
    (*L)->next = (*L)->prior = NULL;
     p = (*L);//p节点指向头结点,然后p在指向q,q在往后移动
     for(i=0;i<26;i++){//添加26个英文字母
        q = (Node *)malloc(sizeof(Node));//生成一个新节点,往里赋值,然后p指向q,
                                         //在生成新节点,以此循环
        if(!q){
            return ERROR;
        }
        q->data = 'A'+i;
        q->prior = p;
        q->next = p->next;//把q的next置为null
        p->next = q;

        p=q;
     }
    //实现巡回的主要步骤

     p->next = (*L)->next; //此时p,q都在最指的是最后一个节点,使p/q指向头结点的下一个节点
     (*L)->next->prior=p;//然后头结点的下一个节点在指回p/q。
     (*L) = p;//头结点在指向p/q
     return OK;
}
void Casear(linked *L,int i){//打印输出链表
    if(i>0){
        do{
            (*L) = (*L)->next;
        }while(--i);
    }
    if(i<0){

        do{

            (*L) = (*L)->prior;
        }while(++i);
    }
}
int main()
{
    linked L;
    int i,n;
    InitList(&L);
    printf("输入一个整数:n");
    scanf("%d",&n);
    Casear(&L,n);
    for(i=0;i<26;i++){
        L = L->next;
        printf("%c",L->data);
    }
    return 0;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/629132.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号