高分求助一段代码的注释,帮我解释一下,顺便帮忙告诉我相关的知识点以及应用,越详细越好~!!谢谢各位高
#include<stdio.h>#include<stdlib.h>structnode{intid;structnode*next;};typedefstructno...
#include<stdio.h>
#include<stdlib.h>
struct node{
int id;
struct node *next;
};
typedef struct node NODE;
NODE * MallocNode(void)
{
NODE *ret;
ret=(NODE *)malloc(sizeof(NODE));
if(ret == NULL)
{
printf("malloc faild!\n");
}
else
{
printf("please input ID:");
scanf("%d",&ret->id);
ret->next=NULL;
}
return ret;
}
NODE *Create(int n,NODE *Head)
{
NODE *p;
int m=n;
if(Head != NULL)
{
printf("链表已存在,创建失败!\n");
return Head;
}
Head=p=MallocNode();
while(--n)
{
p->next=MallocNode();
p=p->next;
}
printf("成功创建%d个结点的链表!\n",m);
return Head;
}
int Show(NODE *Head)
{
NODE *p;
p=Head;
if(!p)
{
printf("链表为空,不能显示\n");
return 1;
}
while(p)
{
if(p->next != NULL)
printf("%d->",p->id);
else
printf("%d\n",p->id);
p=p->next;
}
}
NODE *Insert(NODE *new,NODE *Head)
{
NODE *q,*p;
p=q=Head;
if(Head==NULL)
{
printf("您指定的链表为空,不能插入,请先创建链表!\n");
return Head;
}
while(p)
{
if((new->id <= p->id) && (p==Head))
{
new->next=p;
Head=new;
return Head;
}
else if((p->next == NULL) && (p->id <= new->id))
{
p->next=new;
return Head;
}
else
{
if(new->id >= p->id)
{
q=p;
p=p->next;
}
NODE * FreeLink(NODE *Head)
{
NODE *p;
p=Head;
if(!p)
{
printf("链表中没有结点!\n");
return Head;
}
while(p)
{
Head=Head->next;
p->next=NULL;
FreeNode(p);
p=Head;
}
if(!p)
printf("所有结点已释放!\n");
return Head;
} 展开
#include<stdlib.h>
struct node{
int id;
struct node *next;
};
typedef struct node NODE;
NODE * MallocNode(void)
{
NODE *ret;
ret=(NODE *)malloc(sizeof(NODE));
if(ret == NULL)
{
printf("malloc faild!\n");
}
else
{
printf("please input ID:");
scanf("%d",&ret->id);
ret->next=NULL;
}
return ret;
}
NODE *Create(int n,NODE *Head)
{
NODE *p;
int m=n;
if(Head != NULL)
{
printf("链表已存在,创建失败!\n");
return Head;
}
Head=p=MallocNode();
while(--n)
{
p->next=MallocNode();
p=p->next;
}
printf("成功创建%d个结点的链表!\n",m);
return Head;
}
int Show(NODE *Head)
{
NODE *p;
p=Head;
if(!p)
{
printf("链表为空,不能显示\n");
return 1;
}
while(p)
{
if(p->next != NULL)
printf("%d->",p->id);
else
printf("%d\n",p->id);
p=p->next;
}
}
NODE *Insert(NODE *new,NODE *Head)
{
NODE *q,*p;
p=q=Head;
if(Head==NULL)
{
printf("您指定的链表为空,不能插入,请先创建链表!\n");
return Head;
}
while(p)
{
if((new->id <= p->id) && (p==Head))
{
new->next=p;
Head=new;
return Head;
}
else if((p->next == NULL) && (p->id <= new->id))
{
p->next=new;
return Head;
}
else
{
if(new->id >= p->id)
{
q=p;
p=p->next;
}
NODE * FreeLink(NODE *Head)
{
NODE *p;
p=Head;
if(!p)
{
printf("链表中没有结点!\n");
return Head;
}
while(p)
{
Head=Head->next;
p->next=NULL;
FreeNode(p);
p=Head;
}
if(!p)
printf("所有结点已释放!\n");
return Head;
} 展开
1个回答
展开全部
#include<stdio.h> //库
#include<stdlib.h> //库
struct node{ //结构体 型 结点
int id; //编号
struct node *next; //类型为 结构体(struct node) 型 的指针,名字为next。指向下一个结构体。
};
typedef struct node NODE; // typedef 声明为现有类型创建一个新的名字或称为类型别名
NODE * MallocNode(void) //申请一个新结点,并将其初始化
{
NODE *ret; // 结构体(struct node) 型 变量ret
ret=(NODE *)malloc(sizeof(NODE)); // 取得 NODE的长度
if(ret == NULL) //如果长度为空,输出malloc faild!
{
printf("malloc faild!\n");
}
Else //否则 创建一个新结点输入“ID”数值
{
printf("please input ID:");
scanf("%d",&ret->id);
ret->next=NULL;
}
return ret;
}
NODE *Create(int n,NODE *Head) //创建链
{
NODE *p; //NODE型 指针 p
int m=n; //n赋值给m为了后面统计
if(Head != NULL) //如果链头不为空
{
printf("链表已存在,创建失败!\n");
return Head;
}
Head=p=MallocNode(); //将MallocNode函数的返回值ret (新结点)赋值给链头Head和 结点P,Head和P存储信息相同
while(--n) //递减计算值n,如果n不为空,一直新增结点
{
p->next=MallocNode(); // 调用MallocNode函数生成p指向的下一个结点,并赋值给p->next。
p=p->next; //将p->next的值 赋值给 p
}
printf("成功创建%d个结点的链表!\n",m);
return Head; //返回链头的值
}
int Show(NODE *Head) /*先将链头head赋值给p,用p=p->next循环输出p->id ,判断语句为p->next != NULL ,即p指向的下一个结点不为空,就继续执行*/
{
NODE *p;
p=Head;
if(!p)
{
printf("链表为空,不能显示\n");
return 1;
}
while(p)
{
if(p->next != NULL)
printf("%d->",p->id);
else
printf("%d\n",p->id);
p=p->next;
}
}
NODE *Insert(NODE *new,NODE *Head)
{
NODE *q,*p; /*声明struct node 型指针p q*/
p=q=Head; /*将链头赋值给p q,在此声明,p q只是存储了head的信息,并不是head,所以p或者q的改变不会对head有任何影响,head只是将链表的起始地址和地址中包含的内容告诉他们而已,通俗点就是p->next和head->next相同,p->id和head->id相同,但是p和head不在同一个内存位置,不同的地址包含一样的内容*/
if(Head==NULL) /*如果链头为空,结束*/
{
printf("您指定的链表为空,不能插入,请先创建链表!\n");
return Head;
}
while(p) /*否则,判断p是否为空,不断进行判断*/
{
if((new->id <= p->id) && (p==Head)) /*如果插入元素在表头,直接插入,结束*/
{
new->next=p;
Head=new;
return Head;
}
else if((p->next == NULL) && (p->id <= new->id)) /*如果插于元素位置超过表长,选择在表尾插入,结束*/
{
p->next=new;
return Head;
}
else /*否则,那就是在表中插入*/
{
if(new->id >= p->id) /* 如果插入位置的id和p的id相等,插入新结点*/
{
q=p;
p=p->next; /*p不断后移,q用于存储p前面的地址,方便等下插入新结点用*/
}
/*后面还有哪去了?*/
NODE * FreeLink(NODE *Head) //这完全没必要解释,你了解malloc/creat/insert就可以了。
{
NODE *p;
p=Head;
if(!p)
{
printf("链表中没有结点!\n");
return Head;
}
while(p)
{
Head=Head->next;
p->next=NULL;
FreeNode(p);
p=Head;
}
if(!p)
printf("所有结点已释放!\n");
return Head;
}
#include<stdlib.h> //库
struct node{ //结构体 型 结点
int id; //编号
struct node *next; //类型为 结构体(struct node) 型 的指针,名字为next。指向下一个结构体。
};
typedef struct node NODE; // typedef 声明为现有类型创建一个新的名字或称为类型别名
NODE * MallocNode(void) //申请一个新结点,并将其初始化
{
NODE *ret; // 结构体(struct node) 型 变量ret
ret=(NODE *)malloc(sizeof(NODE)); // 取得 NODE的长度
if(ret == NULL) //如果长度为空,输出malloc faild!
{
printf("malloc faild!\n");
}
Else //否则 创建一个新结点输入“ID”数值
{
printf("please input ID:");
scanf("%d",&ret->id);
ret->next=NULL;
}
return ret;
}
NODE *Create(int n,NODE *Head) //创建链
{
NODE *p; //NODE型 指针 p
int m=n; //n赋值给m为了后面统计
if(Head != NULL) //如果链头不为空
{
printf("链表已存在,创建失败!\n");
return Head;
}
Head=p=MallocNode(); //将MallocNode函数的返回值ret (新结点)赋值给链头Head和 结点P,Head和P存储信息相同
while(--n) //递减计算值n,如果n不为空,一直新增结点
{
p->next=MallocNode(); // 调用MallocNode函数生成p指向的下一个结点,并赋值给p->next。
p=p->next; //将p->next的值 赋值给 p
}
printf("成功创建%d个结点的链表!\n",m);
return Head; //返回链头的值
}
int Show(NODE *Head) /*先将链头head赋值给p,用p=p->next循环输出p->id ,判断语句为p->next != NULL ,即p指向的下一个结点不为空,就继续执行*/
{
NODE *p;
p=Head;
if(!p)
{
printf("链表为空,不能显示\n");
return 1;
}
while(p)
{
if(p->next != NULL)
printf("%d->",p->id);
else
printf("%d\n",p->id);
p=p->next;
}
}
NODE *Insert(NODE *new,NODE *Head)
{
NODE *q,*p; /*声明struct node 型指针p q*/
p=q=Head; /*将链头赋值给p q,在此声明,p q只是存储了head的信息,并不是head,所以p或者q的改变不会对head有任何影响,head只是将链表的起始地址和地址中包含的内容告诉他们而已,通俗点就是p->next和head->next相同,p->id和head->id相同,但是p和head不在同一个内存位置,不同的地址包含一样的内容*/
if(Head==NULL) /*如果链头为空,结束*/
{
printf("您指定的链表为空,不能插入,请先创建链表!\n");
return Head;
}
while(p) /*否则,判断p是否为空,不断进行判断*/
{
if((new->id <= p->id) && (p==Head)) /*如果插入元素在表头,直接插入,结束*/
{
new->next=p;
Head=new;
return Head;
}
else if((p->next == NULL) && (p->id <= new->id)) /*如果插于元素位置超过表长,选择在表尾插入,结束*/
{
p->next=new;
return Head;
}
else /*否则,那就是在表中插入*/
{
if(new->id >= p->id) /* 如果插入位置的id和p的id相等,插入新结点*/
{
q=p;
p=p->next; /*p不断后移,q用于存储p前面的地址,方便等下插入新结点用*/
}
/*后面还有哪去了?*/
NODE * FreeLink(NODE *Head) //这完全没必要解释,你了解malloc/creat/insert就可以了。
{
NODE *p;
p=Head;
if(!p)
{
printf("链表中没有结点!\n");
return Head;
}
while(p)
{
Head=Head->next;
p->next=NULL;
FreeNode(p);
p=Head;
}
if(!p)
printf("所有结点已释放!\n");
return Head;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询