| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 661 人关注过本帖
标题:求助 ,快要考试了,帮帮我吧
只看楼主 加入收藏
请教c语言
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2013-8-17
结帖率:0
收藏
已结贴  问题点数:10 回复次数:9 
求助 ,快要考试了,帮帮我吧
# include <stdio.h>
# include <malloc.h>
# include <stdlib.h>

struct Node
{
    int data ;    //数据域
    struct Node * pNext ;   //指针域   
} ;

//函数声明
struct Node * create_list (void) ;
void traverse_list ( struct Node * ) ;

int main (void)
{
    struct Node * pHead = NULL ;   //等价于struct Node * pHead ;
    pHead = create_list ( ) ;//功能:创建一个非循环单链表,并将该链表的头结点的地址付给pHead
    traverse_list (pHead) ;
   
    return 0 ;
}

struct Node * create_list (void)
{
    int len ;//用来存放有效节点的个数
    int i ;
    int val ;//用来临时存放用户输入的节点的值   
    struct Node * pHead = (    struct Node * )malloc(sizeof(struct Node ) ) ;
    struct Node * pNew = (struct Node *)malloc(sizeof(struct Node ) ) ;//此处依然是  位置放置不对 ,和前面的 类似
    struct Node * pTail = pHead ;
    //分配了一个不存放有效数据的头结点   
    if (NULL==pHead)
    {
        printf ("分配失败,程序终止!\n") ;
        exit (-1) ;
    }
   
    pTail->pNext=NULL ;
    printf ("请输入您需要生成链表的节点个数;len =") ;
    scanf ("%d" ,&len) ;
   
    for ( i=0; i<len; ++i )
    {
        printf ("请输入%d个节点的值:", i+1) ;
        scanf ("%d", &val) ;
        
        if (pNew==NULL)
        {
            printf ("分配失败,程序终止!\n") ;
            exit (-1) ;//终止程序
        }
        pNew->data = val ;
        pTail->pNext = pNew ;
        pNew->pNext = NULL ;
        pTail = pNew ;               
    }
   
    return pHead ;   
}

void traverse_list (struct Node *pHead )
{
    struct Node * ptem= pHead->pNext ;
    while ( NULL != ptem )
    {
        printf ("%d\n" ,ptem->data ) ;
        ptem = ptem->pNext  ;
    }
   
    return ;
}

输出的结果是:
请输入您需要生成链表的节点个数;len =3
请输入1个节点的值:4
请输入2个节点的值:5
请输入3个节点的值:7
7
Press any key to continue
                                    为什么不是 4、5、7,而只有7 呀  求帮忙  万分叩谢!!
搜索更多相关主题的帖子: include return 
2013-08-17 20:10
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
收藏
得分:2 
你好歹说说你的问题是什么。。


学习编程,为的是表达自己的思想,而不是被别人的思想所禁锢。要先明白自己想干嘛,而不要先问别人让你干嘛。               

                                                                                                                    Black Cat      Hello Tomorrow~
2013-08-17 20:20
犿蚂
Rank: 2
等 级:论坛游民
帖 子:29
专家分:23
注 册:2013-4-24
收藏
得分:2 
这是干什么用的,好像我这有这个程序
2013-08-17 20:31
请教c语言
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2013-8-17
收藏
得分:0 
回复 3楼 犿蚂
是是输出链表   你看最后的结果 :  输入 4、5、7  出来 只有7  这是很纠结的,我看了很长时=时间, 都没有看出来哪里有毛病
2013-08-17 21:25
请教c语言
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2013-8-17
收藏
得分:0 
回复 2楼 蚕头燕尾
结果为什么,只有 7输出 ,而不是  4、5、7  ,我用了while,怎么不行呀 ?? (我想问的问题在最后一行),谢谢 求帮忙
2013-08-17 21:28
qq913129508
Rank: 1
等 级:新手上路
帖 子:1
专家分:2
注 册:2013-8-14
收藏
得分:2 
貌似只是分配了两块内存
2013-08-18 07:16
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:2 
临时抱佛脚

DO IT YOURSELF !
2013-08-18 08:00
shenxiaoke05
Rank: 2
等 级:论坛游民
帖 子:14
专家分:19
注 册:2013-8-17
收藏
得分:2 
应该在循环里分配空间,而不是开始
# include <stdio.h>
 # include <malloc.h>
 # include <stdlib.h>

 struct Node
 {
     int data ;    //数据域
    struct Node * pNext ;   //指针域   
 } ;

 //函数声明
struct Node * create_list (void) ;
 void traverse_list ( struct Node * ) ;

 int main (void)
 {
     struct Node * pHead = NULL ;   //等价于struct Node * pHead ;
    pHead = create_list ( ) ;//功能:创建一个非循环单链表,并将该链表的头结点的地址付给pHead
     traverse_list (pHead) ;
     
     return 0 ;
 }

 struct Node * create_list (void)
 {
     int len ;//用来存放有效节点的个数
    int i ;
     int val ;//用来临时存放用户输入的节点的值   
     struct Node * pHead = (    struct Node * )malloc(sizeof(struct Node ) ) ;
      //struct Node * pNew = (struct Node *)malloc(sizeof(struct Node ) ) ; 这是你分配新生产节点地址的原位置,只能分配一次,应该把这句移到循环里
    struct Node * pTail = pHead ;
     //分配了一个不存放有效数据的头结点   
     if (NULL==pHead)
     {
         printf ("分配失败,程序终止!\n") ;
         exit (-1) ;
     }
     pTail->pNext=NULL ;
     printf ("请输入您需要生成链表的节点个数;len =") ;
     scanf ("%d" ,&len) ;
     
     for ( i=0; i<len; ++i )
     {
         printf ("请输入%d个节点的值:", i+1) ;
         scanf ("%d", &val) ;
         struct Node * pNew = (struct Node *)malloc(sizeof(struct Node ) ) ;// 应该把新节点分配地址的语句放到循环里,每循环一次,为新节点分配地址
         if (pNew==NULL)
         {
             printf ("分配失败,程序终止!\n") ;
             exit (-1) ;//终止程序
        }
         pNew->data = val ;
         pTail->pNext = pNew ;
         pNew->pNext = NULL ;
         pTail = pNew ;               
     }
     
     return pHead ;   
 }

 void traverse_list (struct Node *pHead )
 {
     struct Node * ptem= pHead->pNext ;
     while ( NULL != ptem )
     {
         printf ("%d\n" ,ptem->data ) ;
         ptem = ptem->pNext  ;
     }
     
     return ;
 }
2013-08-18 11:25
Alar30
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:10
帖 子:988
专家分:1627
注 册:2009-9-8
收藏
得分:2 
嗯。。
预祝考试成功。。。
2013-08-19 09:11
chybeyond
Rank: 1
等 级:新手上路
帖 子:1
专家分:2
注 册:2013-8-19
收藏
得分:2 
看一下
2013-08-19 10:17
快速回复:求助 ,快要考试了,帮帮我吧
数据加载中...
 
   



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

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