标题:c的链表问题请教高手
只看楼主
无悔
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2008-4-15
 问题点数:0 回复次数:15 
c的链表问题请教高手
#include "stdio.h"
#include "malloc.h"
#define NULL 0
#define LEN sizeof(struct student)

struct student
{   int num;
    float score;
    struct student *next;
};

int n;

struct student *creat(void)
{   struct student *head,*p1,*p2;
    n=0;
    p1=p2=(struct student *)malloc(LEN);
    printf("input p1.num,p1.score");
    scanf("%d,%f",&p1->num,&p1->score);
    head=NULL;
    while(p1->num!=0)
    {n=n+1;
     if(n==1)head=p1;
     else p2->next=p1;
     p2=p1;
     p1=(struct student *)malloc(LEN);
     scanf("%d,%f",&p1->num,&p1->score);
    }
    p2->next=NULL;
    return(head);
}
    


    
    
    
    
    
main()
{
    creat();
   
   
}    
在输入数字后就不对了,好像是格式不对,看不太懂,请高手给看看。
搜索更多相关主题的帖子: 链表 student struct num 
2008-04-20 14:43
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
得分:0 
见过这样写的人,写得几乎一样

那人也发了个帖子。

—>〉Sun〈<—
2008-04-20 14:47
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
得分:0 
#include <stdio.h>
#include <stdlib.h>

typedef struct Node {
    int iData;
    struct Node * pNext;
} * List, Node;

List InitializeList(void);                   // 初始化列表
int InsertNode(List * pList, int iNewData);  // 从小到大插入插入数据
int ShowList(List * pList);                  // 显示列表
void DelList(List * pList);                  // 删除列表

int main(void)
{
    List lobj;
    int data;
   
    lobj = InitializeList();
   
    // ShowList(&lobj);
   
    printf("    请输入一组int数据,每个数据之间用空格分开,\n"
           "并一个非数字字符结束输入。\n");
    while(scanf("%d", &data) == 1)
        InsertNode(&lobj, data);

    ShowList(&lobj);
   
    DelList(&lobj);
   
    system("Pause");
    return 0;
}

List InitializeList(void)           // 初始化列表
{
    return NULL;
}

int InsertNode(List * pList, int iNewData)    // 从小到大插入插入数据
{
    Node * pCurNode;    // 指向当前节点
    Node * pPreNode;    // 指向前一个节点
    Node * pNewNode;    // 指向新创建的节点
   
    pPreNode = NULL;
    pCurNode = *pList;
   
    pNewNode = (Node *)malloc(sizeof(Node));   // 创建一个新节点
   
    if(pNewNode == NULL)      // 新节点创建失败
        return 0;

    pNewNode->iData = iNewData;      // 把数据放入该节点
   
    while(pCurNode != NULL && pCurNode->iData <= iNewData)
    {
        pPreNode = pCurNode;
        pCurNode = pCurNode->pNext;
    }
   
    pNewNode->pNext = pCurNode;  // 把比 iNewData (数据)大的节点放在新节点后
   
    if(pPreNode == NULL)    // 列表为空,或在第一个数据前
    {
        *pList = pNewNode;
    }
    else                    // 列表中,或列结尾
    {
        pPreNode->pNext = pNewNode;
    }

    return 1;
}

int ShowList(List * pList)                 // 显示列表
{
    int count = 0;      // 节点个数
    Node * pCurNode;    // 指向当前节点
   
    pCurNode = *pList;  // 指向第一个节点

    while(pCurNode != NULL)
    {
        ++count;
        printf("%d ", pCurNode->iData);
        pCurNode = pCurNode->pNext;
    }
   
    if(count == 0)
        printf("\n列表中无数据!\n");

    putchar('\n');
    return count;
}

void DelList(List * pList)          // 删除列表(删除所有节点)
{
    Node * pCurNode;    // 指向当前节点
    Node * pTempNode;   // 临时节点指针
   
    pCurNode = *pList;  // 指向第一个节点
   
    while(pCurNode != NULL)
    {
        pTempNode = pCurNode->pNext;
        free(pCurNode);
        pCurNode = pTempNode;
    }
   
    *pList = NULL;
}

—>〉Sun〈<—
2008-04-20 14:53
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
得分:0 
搂主,为何这样创建链表?

这个函数完全失败。

[[it] 本帖最后由 cosdos 于 2008-4-20 14:58 编辑 [/it]]

—>〉Sun〈<—
2008-04-20 14:54
zyhfbim1a9
Rank: 1
等 级:新手上路
帖 子:80
专家分:0
注 册:2008-3-15
得分:0 
哈哈 是我发的,
我们看的是同样一本书 呵呵。
我有个解决的方法,但是不知道原因。
把num 也改成float型。反正只要num 和score是同一种数据类型就没问题。
高手来解释下咯,我也很好奇啊,感觉很神奇哦,C太神奇了
2008-04-20 14:54
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
得分:0 
[bo]以下是引用 [un]zyhfbim1a9[/un] 在 2008-4-20 14:54 的发言:[/bo]

哈哈 是我发的,
我们看的是同样一本书 呵呵。
我有个解决的方法,但是不知道原因。
把num 也改成float型。反正只要num 和score是同一种数据类型就没问题。
高手来解释下咯,我也很好奇啊,感觉很神奇哦,C太神奇了 ...


呦呵,我上次看的贴子不是你的,

说下这本什么书,居然写这样。

—>〉Sun〈<—
2008-04-20 15:00
zyhfbim1a9
Rank: 1
等 级:新手上路
帖 子:80
专家分:0
注 册:2008-3-15
得分:0 
这可是老谭书上的呢,难道老谭在忽悠我们???
我刚好也看到链表这里,这两天被链表完全搞得莫名其妙了。
看着书觉得看得懂没问题,代码写好了,编译没问题,可是一运行,马上系统弹出错误提示。更搞笑的是后面链表的综合操作,把几个函数分开在main()执行没问题,可是当创建链表、插入链表、打印链表的函数,都在main()中调用就又出问题了。
     这几天好受打击啊。
2008-04-20 15:07
zyhfbim1a9
Rank: 1
等 级:新手上路
帖 子:80
专家分:0
注 册:2008-3-15
得分:0 
就是C程序设计啊 谭好强的
2008-04-20 15:08
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
得分:0 
又找到了看老谭书的坏处了

—>〉Sun〈<—
2008-04-20 15:11
zyhfbim1a9
Rank: 1
等 级:新手上路
帖 子:80
专家分:0
注 册:2008-3-15
得分:0 
那你给我们新手推荐本牛鼻的C书撒
2008-04-20 15:14



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-210050-1-1.html




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

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