建立单链表程序中有几行代码看不懂,求解释

#include<stdio.h>
#define N 5
typedef struct node
{
char name[20];
struct node *link;
}stud;
stud * creat(int n)
{
stud *p,*h,*s;
int i;
if ((h=(stud *)malloc(sizeof(stud)))==NULL)\\这一行的作用是什么?
{
printf("ERROR");
exit(0);
}
h->name[0]='\0';
h->link=NULL;
p=h;
for(i=0;i<n;i++)
{
if((s=(stud *)malloc(sizeof(stud)))==NULL)\\为什么要循环多次地执行这行?这行的作用是什么?
{
printf("ERROR");
exit(0);
}
p->link=s;
printf("Please input the %d name:",i+1);
scanf("%s",s->name);
s->link=NULL;
p=s;
}
return(h);\\这行代码又有什么作用?
}
void main()
{
int number;
stud *head,*p;
number=N;
head=creat(number);
printf("Output:\n");
for (p=head->link;p!=NULL;p=p->link)
printf("%s\t",p->name);
另外,我用VC++6.0运行该程序时提示“Error spawing CL.EXE”,该怎么解决?

if ((h=(stud *)malloc(sizeof(stud)))==NULL)\\这一行的作用是什么?

这行是用来分配空间的。。,如果分配失败就返回。
if((s=(stud *)malloc(sizeof(stud)))==NULL)\\为什么要循环多次地执行这行?这行的作用是什么?

这行也是,因为有n个人,每个人都要分配空间啊。
return(h);\\这行代码又有什么作用?

把建立好的链表返回调用函数

我用VC++6.0运行该程序时提示“Error spawing CL.EXE”,该怎么解决?

可能是这个文件变成了只读, 重新建立一个就行。
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-11-03
if ((h=(stud *)malloc(sizeof(stud)))==NULL) 如果申请空间失败。不管失败与否都将申请的首地址给
h

if((s=(stud *)malloc(sizeof(stud)))==NULL) 和上面是一样的,只不过将申请空间地址给你赋值给了s
多次执行的意思是申请多个stud*,在这的含义是有多少个人就申请多少个stud*。因为这些人的信息需要空间存储

求一个C语言单链表的排序函数,很急很急
用选择排序就行,代码如下。链表结构如下:typedef struct Node { T value;struct Node *link;}Node;void selectSort(Node *node){ Node *cur; \/*当前节点*\/ Node *next; \/*遍历未排序节点*\/ Node *min; \/*指向未排序节点中最小节点*\/ T temp;\/*从头节点的下一个节点开始,一直到倒数第二...

有一个带头结点的单链表L,设计一个算法使其元素递增有序排列
\/* 插入排序法 *\/void sort(Linklist *&L){ LinkList *p=L->next, *q, *r; if(p!=NULL) { \/* 把链表分成两条,一条已经排序好了(L),一条待排序(p)*\/ r=p->next; p->next=NULL; p=r; \/* 对于所有待排序的元素 *\/ while(p!=NULL) { ...

简单的C语言120行左右代码
注释部分你可以不要,这样算下来也就120左右了,给你不删掉的原因是你可以理解它的作用,如果可以请采纳!!#include <stdio.h>#include <stdlib.h>typedef struct ListNode { \/\/单链表存储结构int data; \/\/数据域struct ListNode * next;\/\/指针域}LNode, * pNode; \/\/LNode等价于s...

数据结构c语言初始化单链表的头结点 为什么这么写不对 求高手解答!
一个很经典的小例子,void swap(int &a,int &b)。就是交换a.b的值的函数。如果,没用&的话,你看看是行不通的。

函数:求有头结点单链表长度
新写的int getLength(LinkList head)代码如下:完整代码为:include<stdio.h> include<malloc.h> define ERROR 0 define OK 1 typedef int ElemType; \/*定义表元素的类型*\/ typedef struct LNode \/*线性表的单链表存储*\/ { ElemType data;struct LNode *next;}LNode, *LinkList;\/*创建单链表*...

单链表关于头结点的意义怎么理解?不懂,求解释
第一个结点就是实际的第一个数据结点这种结构:对于空链表,每当对其进行添加或删除都要判断是否为空(因为若不为空,就可以直接删除或者添加在尾部或中间);若对其进行插入操作,那么就会出现在第一个元素之前插入的操作方式与插入两个元素之间的操作就不一致(因为第一个元素之前并没有结点,...

编写程序,建立一个带有节点的单向链表,输入字符串,并按从小到大顺序组织...
链表的具体存储表示为:① 用一组任意的存储单元来存放线性表的结点(这组存储单元既可以是连续的,也可以是不连续的)② 链表中结点的逻辑次序和物理次序不一定相同。为了能正确表示结点间的逻辑关系,在存储每个结点值的同时,还必须存储指示其后继结点的地址(或位置)信息(称为指针(pointer)或链(...

c语言数据结构单链表的初始化 插入 销毁 元素的取出 删除 操作 求详细C...
\/\/链表建立 Node* creat(){ Node *head = NULL, *p = NULL, *s = NULL;int Date = 0, cycle = 1;head = (Node*)malloc(sizeof(Node));if(NULL == head){ printf("分配内存失败\\r\\n");return NULL;} head->pstnext = NULL;p = head;while(cycle){ printf("请输入数据且当...

以下程序表达的是什么意思?
整段代码的意思就是实现了链表的新建、节点插入、节点删除和打印等功能 对其进行了详细的注释,如下图:注释后的代码如下:(其中修改了两处地方,详见注释加粗部分)include <malloc.h> include <stdio.h> define TRUE 1 define FALSE 0 define OK 1 define ERROR 0 define INFEASIBLE -1 define ...

数据结构 单链表的初始化为什么要定义一个双重指针啊,定义成简单指针不...
楼主查阅的那些资料是对的。链表名是一个地址常量,你可以把它看成是一个常量指针,即不能改变它的指向的指针,所以你只能改变链表中除头结点外的指针,而不能改动整个链表。LinkList *head定义二级指针增强了函数的移植能力。

相似回答