aaasdfgzzy 2022-09-25 08:19 采纳率: 79.4%
浏览 36
已结题

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

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

#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);
        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("顺序打印为:%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;
}

  • 写回答

2条回答 默认 最新

  • qzjhjxj 2022-09-25 11:02
    关注

    修改处见注释,供参考:

    #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;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月3日
  • 已采纳回答 9月25日
  • 创建了问题 9月25日

悬赏问题

  • ¥15 服务端控制goose报文控制块的发布问题
  • ¥15 学习指导与未来导向啊
  • ¥15 求多普勒频移瞬时表达式
  • ¥15 如果要做一个老年人平板有哪些需求
  • ¥15 k8s生产配置推荐配置及部署方案
  • ¥15 matlab提取运动物体的坐标
  • ¥15 人大金仓下载,有人知道怎么解决吗
  • ¥15 一个小问题,本人刚入门,哪位可以help
  • ¥30 python安卓开发
  • ¥15 使用R语言GD包一直不出结果