//没有打印结果,求改错
#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自身的地址