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

双向链表建立问题

qweiuy566 发布于 2016-10-15 10:16, 2425 次点击
#include<stdio.h>
#include<iostream>
#include<malloc.h>
using namespace std;
typedef struct node  //循环双向链表
{
    int data;   //数据
    struct node *prior;//前驱   
    struct node *next; //后继
}Node;
void create(Node *L);  //建立双向单链表

main()
{
    Node *L;   //表头指针
    create(L);
}
 
void create(Node *L)  //建立双向单链表
{
    Node *p,*q;
    q=L;
    cout<<"建立单链表,请输入数据: ";
    L=(Node*)malloc(sizeof(Node));
    cin>>L->data;     cout<<endl;
    L->prior=L->next=NULL;
    for(;;)
    {
        cout<<"继续输入数据(若输入非数字则结束): ";
        p=(Node*)malloc(sizeof(Node));
        cin>>p->data;
        if(cin.fail())  //cin.fail()函数:如果输入的是int类型,则操作成功,返回假值 0,操作失败,返回真值 1
        /* 如果输入的不是数字 */
        {    cout<<"输入非数字,单链表建立完成"<<endl;break; }
        else
        {
            q->next=p;   p->prior=q;
            p->next=L;     L->prior=p;
            q=p;
        }
    }
     
}

可能是最后的 else 那里出现了问题,但是不知道怎么改,帮忙看下
4 回复
#2
书生牛犊2016-10-15 17:12
else 处怎么填我还没想出来,想咨询一下楼主
程序代码:
void create(Node *L)  //建立双向单链表
{
    Node *p,*q;
    q=L;
    cout<<"建立单链表,请输入数据: ";
    L=(Node*)malloc(sizeof(Node));//这样的写法能够成功影响到外面的L吗?我感觉不能诶!如果真的不能,那么后续代码也没意义了

#3
书生牛犊2016-10-15 17:29

程序代码:
#include<stdio.h>
#include<iostream>
#include<malloc.h>
using namespace std;
typedef struct node  //循环双向链表
{
    int data;   //数据
    struct node *prior;//前驱   
    struct node *next; //后继
}Node;
Node* create();  

main()
{
    Node *L=create();
}

 
Node* create()  //建立双向单链表
{
      cout<<"建立单链表,请输入数据: ";
    Node *L=(Node*)malloc(sizeof(Node));
    L->next=NULL;L->prior=NULL;   
    int data;
    if(scanf("%d",&data)!=1){//如果第一个数据没有读到正确的数据,Creat函数返回NULL
        return NULL;
    }else{
        L->data=data;
    }
    Node*p=L;
cout<<"继续输入数据(若输入非数字则结束): ";
    while(scanf("%d",&data)==1)
    {      
        p->next=(Node*)malloc(sizeof(Node));
        p->next->data=data;
        p->nxet->prior=p;
        p=p->next;//保持令p指向双向链表的最后一个节点        
cout<<"继续输入数据(若输入非数字则结束): ";
    }
     p->next=L;//令链表的最后一个节点只想链表头
    L->prior=p;//关联头结点和尾节点
return L;
}


现在用的是别人的电脑,没有编译器,以上代码未进行实例测试。
#4
qweiuy5662016-10-15 22:02
回复 3楼 书生牛犊
嗯,你这个程序可以运行的,可我的程序问题出在哪里呢?
我找到了,在for循环中的
cout<<"继续输入数据(若输入非数字则结束): ";
        p=(Node*)malloc(sizeof(Node));
                p->next=L;
        cin>>p->data;
刚开始没有把L和p联系起来

[此贴子已经被作者于2016-10-15 22:33编辑过]

#5
qweiuy5662016-10-15 22:35
回复 3楼 书生牛犊
最近正在学数据结构,望版主多多帮助。
1