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();
}
在输入数字后就不对了,好像是格式不对,看不太懂,请高手给看看。
----------------解决方案--------------------------------------------------------
见过这样写的人,写得几乎一样
那人也发了个帖子。
----------------解决方案--------------------------------------------------------
#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太神奇了 ...
哈哈 是我发的,
我们看的是同样一本书 呵呵。
我有个解决的方法,但是不知道原因。
把num 也改成float型。反正只要num 和score是同一种数据类型就没问题。
高手来解释下咯,我也很好奇啊,感觉很神奇哦,C太神奇了 ...
呦呵,我上次看的贴子不是你的,
说下这本什么书,居然写这样。
----------------解决方案--------------------------------------------------------
这可是老谭书上的呢,难道老谭在忽悠我们???
我刚好也看到链表这里,这两天被链表完全搞得莫名其妙了。
看着书觉得看得懂没问题,代码写好了,编译没问题,可是一运行,马上系统弹出错误提示。更搞笑的是后面链表的综合操作,把几个函数分开在main()执行没问题,可是当创建链表、插入链表、打印链表的函数,都在main()中调用就又出问题了。
这几天好受打击啊。
----------------解决方案--------------------------------------------------------
就是C程序设计啊 谭好强的
----------------解决方案--------------------------------------------------------
又找到了看老谭书的坏处了
----------------解决方案--------------------------------------------------------
那你给我们新手推荐本牛鼻的C书撒
----------------解决方案--------------------------------------------------------