当前位置: 代码迷 >> C语言 >> c的链表问题请教高手
  详细解决方案

c的链表问题请教高手

热度:149   发布时间:2008-04-20 14:43:06.0
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  

----------------解决方案--------------------------------------------------------
见过这样写的人,写得几乎一样

那人也发了个帖子。
----------------解决方案--------------------------------------------------------
#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;
}

----------------解决方案--------------------------------------------------------
搂主,为何这样创建链表?

这个函数完全失败。

[[it] 本帖最后由 cosdos 于 2008-4-20 14:58 编辑 [/it]]
----------------解决方案--------------------------------------------------------
哈哈 是我发的,
我们看的是同样一本书 呵呵。
我有个解决的方法,但是不知道原因。
把num 也改成float型。反正只要num 和score是同一种数据类型就没问题。
高手来解释下咯,我也很好奇啊,感觉很神奇哦,C太神奇了
----------------解决方案--------------------------------------------------------
[bo]以下是引用 [un]zyhfbim1a9[/un] 在 2008-4-20 14:54 的发言:[/bo]

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


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

说下这本什么书,居然写这样。
----------------解决方案--------------------------------------------------------
这可是老谭书上的呢,难道老谭在忽悠我们???
我刚好也看到链表这里,这两天被链表完全搞得莫名其妙了。
看着书觉得看得懂没问题,代码写好了,编译没问题,可是一运行,马上系统弹出错误提示。更搞笑的是后面链表的综合操作,把几个函数分开在main()执行没问题,可是当创建链表、插入链表、打印链表的函数,都在main()中调用就又出问题了。
     这几天好受打击啊。
----------------解决方案--------------------------------------------------------
就是C程序设计啊 谭好强的
----------------解决方案--------------------------------------------------------
又找到了看老谭书的坏处了
----------------解决方案--------------------------------------------------------
那你给我们新手推荐本牛鼻的C书撒
----------------解决方案--------------------------------------------------------
  相关解决方案