| 网站首页 | 业界新闻 | 群组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 1251 人关注过本帖
标题:双向链表建立问题
只看楼主 加入收藏
qweiuy566
Rank: 2
等 级:论坛游民
帖 子:48
专家分:19
注 册:2016-1-27
结帖率:75%
  已结贴   问题点数:8  回复次数:4   
双向链表建立问题
#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 那里出现了问题,但是不知道怎么改,帮忙看下
搜索更多相关主题的帖子: include  create  
2016-10-15 10:16
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:城市猎人
威 望:9
帖 子:1062
专家分:5099
注 册:2015-10-27
  得分:8 
else 处怎么填我还没想出来,想咨询一下楼主
程序代码:
void create(Node *L)  //建立双向单链表 
{
    Node *p,*q;
    q=L;
    cout<<"建立单链表,请输入数据: ";
    L=(Node*)malloc(sizeof(Node));//这样的写法能够成功影响到外面的L吗?我感觉不能诶!如果真的不能,那么后续代码也没意义了


φ(゜▽゜*)♪
2016-10-15 17:12
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:城市猎人
威 望:9
帖 子:1062
专家分:5099
注 册:2015-10-27
  得分:0 

程序代码:
#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;
} 


现在用的是别人的电脑,没有编译器,以上代码未进行实例测试。

φ(゜▽゜*)♪
2016-10-15 17:29
qweiuy566
Rank: 2
等 级:论坛游民
帖 子:48
专家分:19
注 册:2016-1-27
  得分:0 
回复 3楼 书生牛犊
嗯,你这个程序可以运行的,可我的程序问题出在哪里呢?
我找到了,在for循环中的
cout<<"继续输入数据(若输入非数字则结束): ";
        p=(Node*)malloc(sizeof(Node));
                p->next=L;
        cin>>p->data;
刚开始没有把L和p联系起来

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


吾道不孤
2016-10-15 22:02
qweiuy566
Rank: 2
等 级:论坛游民
帖 子:48
专家分:19
注 册:2016-1-27
  得分:0 
回复 3楼 书生牛犊
最近正在学数据结构,望版主多多帮助。

吾道不孤
2016-10-15 22:35







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.051026 second(s), 8 queries.
Copyright©2004-2019, BCCN.NET, All Rights Reserved