注册 登录
编程论坛 数据结构与算法

双向链表创建

feigechen7 发布于 2012-11-04 12:26, 485 次点击
/*

*/

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

typedef struct node
{
    int data;
    struct node* next;
    struct node* prior;
}DLinklist;

bool initList(DLinklist* head);
bool createList(DLinklist* head,int n);
int main()
{
    DLinklist* head=NULL;
    DLinklist* p,*q;
    int n;
    initList(head);
    printf("请输入链表长度:");
    scanf("%d",&n);
    createList(head,n);
   
    return 0;
}

bool initList(DLinklist* head)      //初始化链表
{
    head=(DLinklist*)malloc(sizeof(DLinklist));
    if(!head)
        return false;
    head->next=head;
    head->prior=head;
    return true;
}

bool createList(DLinklist* head,int n)//创建链表
{
    DLinklist* p,*q;
    p=head;
    int i,e;
    for(i=1;i<=n;i++)
    {
        
        printf("请输入第%d个节点的数据",i);
        scanf("%d",&e);
        q=(DLinklist*)malloc(sizeof(DLinklist));
        if(!q)
        {
            printf("error");
            return false;
        }
        q->data=e;
        q->next=p->next;
        p->next=q;
        q->prior=p;
        
        q->next=NULL;
        
        p=q;

    }
    return true;
}
输入元素的时候,总是输完一个数据后就死了,哪里有问题啊,新人积分不多
5 回复
#2
寒风中的细雨2012-11-04 14:42
非法 访问内存的结构 导致的               


指针用的不熟练

  DLinklist* head=NULL;

  initList(head);
这两句结合起来就是错误!
#3
feigechen72012-11-04 19:21
回复 2楼 寒风中的细雨
问题解决了,你能解释一下吗
#4
寒风中的细雨2012-11-05 15:00
回复 3楼 feigechen7
问题解决了  不清楚原因?
#5
feigechen72012-11-05 23:23
回复 4楼 寒风中的细雨
对,不怎么清楚
#6
寒风中的细雨2012-11-06 08:44
    DLinklist* head=NULL;
    DLinklist* p,*q;
    int n;
    initList(head);
没有改变head的值      

这里直接点的改法是  head = initList(head);     把改变后的值返回过来
1