数据结构(C语言版)`双向链表

程序有误,不知道哪里错了,题目就是一个关于双向链表的打印。

#include
#include
#include
#define MaxSize 5

typedef struct DuLNode
{
    char varchar;
    struct DuLNode *prior; //前驱指针
    struct DuLNode *next;  //后驱指针
}DuLNode,*DuLinkList;

DuLinkList InitDuLinkList(DuLNode *H)
{
    DuLinkList p,q;
    int i,c=0;
    for(i=0;imalloc(sizeof(DuLNode));
        c++;
        if(c==1)
        {
            q = H = p;  //首元结点做头节点
            q->prior = NULL;
        }
        else 
        {
            q->next = p;
            p->prior = q;
            q = p;
        }
    }
    return H;
}

DuLinkList InputElem(DuLinkList H)
{
    int i;
    DuLinkList p,q;
    p = H;
    for(i=0;iprintf("请输入第%d个字符:",i+1);
        scanf("%c",&p->varchar);
        if(p->next==NULL) q = p;    //找到尾节点
        p = p->next;
    }
    return q;
}

void Print(DuLinkList *H,DuLinkList *L)
{
    DuLinkList p,q;
    char s[2][20];
    int i;
    p = H;
    q = L;
    for(i=0;i0][i] = p->varchar;
        s[1][i] = q->varchar;
        p = p->next;
        q = q->prior;
    }
    printf("顺序打印为:%s\n逆序打印为:%s\n",s[0],s[1]);
    if(strcmp(s[0],s[1]) == 0) printf("相等\n");
    else printf("不相等\n");
}

int main()
{
    DuLNode *H,*L;
    H = InitDuLinkList(H);    //返回头节点
    L = InputElem(H);    //返回尾节点
    Print(H,L);
    return 0;
}

修改处见注释,供参考:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MaxSize 5

typedef struct DuLNode
{
    char varchar;
    struct DuLNode *prior; //前驱指针
    struct DuLNode *next;  //后驱指针
}DuLNode,*DuLinkList;

DuLinkList InitDuLinkList(DuLNode *H)
{
    DuLinkList p,q;
    int i,c=0;
    for(i=0;i<MaxSize;i++)
    {
        p = (DuLinkList)malloc(sizeof(DuLNode));
        c++;
        if(c==1)
        {
            q = H = p;  //首元结点做头节点
            q->prior = NULL;
        }
        else
        {
            q->next = p;
            p->prior = q;
            q = p;
        }
    }
    return H;
}

DuLinkList InputElem(DuLinkList H)
{
    int i;
    DuLinkList p,q;
    p = H;
    for(i=0;i<MaxSize;i++)
    {
        printf("请输入第%d个字符:",i+1);
        scanf(" %c",&p->varchar); // 修改
        //scanf("%c",&p->varchar);
        if(p->next==NULL) q = p;//找到尾节点
        p = p->next;
    }
    return q;
}

void Print(DuLinkList H,DuLinkList L) // 修改 这里两个形参,不需要二级指针 **
//void Print(DuLinkList *H,DuLinkList *L)
{
    DuLinkList p,q;
    char s[2][20];
    int i;
    p = H;
    q = L;
    for(i=0;i<MaxSize;i++)
    {
        s[0][i] = p->varchar;
        s[1][i] = q->varchar;
        p = p->next;
        q = q->prior;
    }
    s[0][i] = '\0';//修改 加上字符串结束符 '\0'
    s[1][i] = '\0';

    printf("顺序打印为:%s\n逆序打印为:%s\n",s[0],s[1]);
    if(strcmp(s[0],s[1]) == 0)
        printf("相等\n");
    else
        printf("不相等\n");
}
 
int main()
{
    DuLNode *H,*L;
    H = InitDuLinkList(H);//返回头节点
    L = InputElem(H);    //返回尾节点
    Print(H,L);
    return 0;
}

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MaxSize 5
 
typedef struct DuLNode
{
    char varchar;
    struct DuLNode *prior; //前驱指针
    struct DuLNode *next;  //后驱指针
}DuLNode,*DuLinkList;
 
DuLinkList InitDuLinkList(DuLNode *H)
{
    DuLinkList p,q;
    int i,c=0;
    for(i=0;i<MaxSize;i++)
    {
        p = (DuLinkList)malloc(sizeof(DuLNode));
        c++;
        if(c==1)
        {
            q = H = p;  //首元结点做头节点
            q->prior = NULL;
        }
        else 
        {
            q->next = p;
            p->prior = q;
            q = p;
        }
    }
    return H;
}
 
DuLinkList InputElem(DuLinkList H)
{
    int i;
    DuLinkList p, q;
    p = H;
    for(i=0; i<MaxSize; i++)
    {
        printf("请输入第%d个字符:", i+1);
        scanf("%c", &p->varchar);
        getchar();
        if(p->next == NULL) 
            q = p;    //找到尾节点
        p = p->next;
    }
    return q;
}
 
void Print(DuLinkList H, DuLinkList L)
{
    DuLinkList p, q;
    char s[2][20];
    int i;
    p = H;
    q = L;
    for(i=0; i < MaxSize; i++)
    {
        s[0][i] = p->varchar;
        s[1][i] = q->varchar;
        p = p->next;
        q = q->prior;
    }
    printf("%d %d\n", strlen(s[0]), strlen(s[1]));
    printf("顺序打印为: %s\n", s[0]);
    printf("逆序打印为: %s\n", s[1]);
    if(strcmp(s[0], s[1]) == 0) 
        printf("相等\n");
    else 
        printf("不相等\n");
}
 
int main()
{
    DuLNode *H, *L;
    H = InitDuLinkList(H);    //返回头节点
    L = InputElem(H);    //返回尾节点
    Print(H,L);
    return 0;
}