双向循环链表实现

 

#include <stdio.h>
#include <stdlib.h>

#define OK      1
#define ERROR   0

//可以方便的改变元素类型
typedef char ElemType;
typedef int  Status;

typedef struct node{
    int data; 
    struct node * prior;
    struct node * next;
}node, *LinkList;

Status DoubleLinkInit(LinkList *L)
{
    node *p, *q;
    int i;

    if(!(*L))
        return ERROR;
    (*L)->next=(*L)->prior=NULL;
    p = (*L);
    //p永远指向终端结点,类似尾插法
    for (i = 0; i < 26;i++)
    {
        q= (node *)malloc(sizeof(node));
        if(!q)
            return ERROR;

        q->data='A'+i;
        
        p->next=q;
        q->prior = p;
        p = q;
    }
    p->next = (*L)->next;
    (*L)->next->prior = p;
    (*L) = (*L)->next;

    return OK;
}

void Caesar(LinkList *L,int i)
{
    if(i>0)
    {
        do
        {
            (*L)=(*L)->next;
        } while (--i);
    }

    if(i<0)
    {
        do
        {
            (*L) = (*L)->prior;
        } while (++i);
    }
    for (int j = 0; j < 26;j++)
    {
        printf("%c", (*L)->data);
        (*L) = (*L)->next;
    }
    
}

int main()
{
    // LinkList L;3
    int n;

    LinkList *L = (LinkList)malloc(sizeof(node)); /* 产生头结点,并使L指向此头结点 */
    DoubleLinkInit(&L);

    printf("请输入一个整数:");
    scanf("%d", &n);

    Caesar(&L,n);
    printf("wdqwazv");

    // printf("%c", L->data);
    // for (int j = 0; j < 26; j++)
    // {
    //     printf("%c", (*L)->data);
    //     (*L) = (*L)->next;
    //     printf("fsd");
    // }
}
View Code

问题:for循环打印结果放到main函数中不显示任何结果????

没解决

 

posted @ 2020-08-21 22:37  wind_y  阅读(130)  评论(0编辑  收藏  举报