数据结构(c语言)-双向链表建立打印

//没有打印结果,求改错

#include
#include
#include
#define MaxSize 10
typedef struct DuLNode
{
    int data;
    int length;
    struct DuLNode *prior;
    struct DuLNode *next;
}DuLNode,*DuLinkList;

void InitDuList(DuLinkList H,DuLinkList F)
{
     DuLNode *p,*q,*m;
     int i,c=0;
     F->prior = NULL;
     H->next = NULL;
     for(i=0;imalloc(sizeof(DuLNode));
         q = p;
         c++;
         if(c==1) 
        {
            m = H = p;
         }
         m->next = p;
         m = m->next;
         q->prior = F->prior;
         F->prior = q;
         p->data = i;
        H->length += 1;
     }
}

void Print(DuLNode *H,DuLNode *F)
{
    DuLinkList p,q;
    p = H;
    q = F;
    int i;
    printf("顺序打印:\n");
    for(i=0;i < H->length;i++)
    {
        printf("data[%d] = %d",i,p->data);
        p = p->next;
    }
    printf("逆序打印:\n");
    for(i= H->length-1; i>=0; i--)
    {
        printf("data[%d] = %d",i,q->data);
        q = q->prior; 
    } 
}

int main()
{
    DuLinkList H,F;
    InitDuList(H,F);
    Print(H,F);
    return 0;
} 

修改如下,供参考:

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define MaxSize 10
typedef struct DuLNode
{
    int data;
    int length;
    struct DuLNode *prior;
    struct DuLNode *next;
}DuLNode,*DuLinkList;

void InitDuList(DuLinkList* H,DuLinkList* F) //修改
{
     DuLNode *p,*q,*m;
     int i,c=0;
     //F->prior = NULL;
     //H->next = NULL;
     for(i=0;i<MaxSize;i++)
     {
         p = (DuLNode*)malloc(sizeof(DuLNode));
         //q = p;
         p->next = NULL;
         p->data = i;
         c++;
         if(c == 1){
            (*H) = p;
            (*H)->prior = NULL;
         }
         else{
            m->next = p;
            p->prior= m;
            //m = m->next;
         }
         m = p;
         //q->prior = F->prior;
         //F->prior = q;
         //H->length += 1;
     }
     (*F) = p;
}

 
void Print(DuLNode *H,DuLNode *F)
{
    DuLinkList p,q;
    p = H;
    q = F;
    int i = 0;
    printf("顺序打印:\n");
    while (p)  //for(i=0;i < H->length;i++)
    {
        printf("data[%d]=%d ",i++, p->data);
        p = p->next;
    }
    printf("\n");
    i--;
    printf("逆序打印:\n");
    while (q) //for(i= H->length-1; i>=0; i--)
    {
        printf("data[%d]=%d ",i--,q->data);
        q = q->prior; 
    }
    printf("\n"); 
}
 
int main()
{
    DuLinkList H = NULL,F = NULL;
    InitDuList(&H,&F); //InitDuList(H,F);
    Print(H,F);
    return 0;
}

你这初始化函数是错的,用指针参数是无法修改指针自身的地址的
需要将参数改为DuLinkList *才能修改H,F自身的地址