c++方面问题 请高手帮忙 急~!

请各个位高手帮小弟解释下下面的程序的每句含义最好详细一些谢谢大侠们了!#include<stdlib.h>#include<stdio.h>structlist{intd... 请各个位高手帮小弟解释下下面的程序的每句含义 最好详细一些
谢谢大侠们了!
#include<stdlib.h>
#include<stdio.h>
struct list
{ int data;
struct list *next;
};
typedef struct list node;
typedef node *link;
link delete_node(link pointer,link tmp)
{if (tmp==NULL) /*delete first node*/
return pointer->next;
else
{ if(tmp->next->next==NULL)/*delete last node*/
tmp->next=NULL;
else /*delete the other node*/
tmp->next=tmp->next->next;
return pointer;
}
}
void selection_sort(link pointer,int num)
{ link tmp,btmp;
int i,min;
for(i=0;i<num;i++)
{
tmp=pointer;
min=tmp->data;
btmp=NULL;
while(tmp->next)
{ if(min>tmp->next->data)
{min=tmp->next->data;
btmp=tmp;
}
tmp=tmp->next;
}
printf("\40: %d\n",min);
pointer=delete_node(pointer,btmp);
}
}
link create_list(int array[],int num)
{ link tmp1,tmp2,pointer;
int i;
pointer=(link)malloc(sizeof(node));
pointer->data=array[0];
tmp1=pointer;
for(i=1;i<num;i++)
{ tmp2=(link)malloc(sizeof(node));
tmp2->next=NULL;
tmp2->data=array[i];
tmp1->next=tmp2;
tmp1=tmp1->next;
}
return pointer;
}
link concatenate(link pointer1,link pointer2)
{ link tmp;
tmp=pointer1;
while(tmp->next)
tmp=tmp->next;
tmp->next=pointer2;
return pointer1;
}
void main(void)
{ int arr1[]={3,12,8,9,11};
link ptr;
ptr=create_list(arr1,5);
selection_sort(ptr,5);
}
展开
 我来答
xblyifan
推荐于2016-03-18 · TA获得超过401个赞
知道小有建树答主
回答量:76
采纳率:0%
帮助的人:107万
展开全部
#include<stdlib.h>
#include<stdio.h>
struct list //定义一个结构,struct为关键字,list为结构名
{ int data; //结构包含一个整型数据data
struct list *next; //结构包含一个指针next
};
typedef struct list node; //typedef为关键字,声明一个和list型结构相同的结构node(结点)
typedef node *link; //声明一个node型指针link
link delete_node(link pointer,link tmp) //删除结点
{if (tmp==NULL) /*delete first node*/
return pointer->next;//如果链表pointer的头结点为空(NULL),返回pointer的next指针
else
{ if(tmp->next->next==NULL)/*delete last node*/ //判断tmp的后面只有一个结点的情况
tmp->next=NULL; //将tmp的下一个结点赋值为空(NULL),即删除tmp后面的那个结点
else /*delete the other node*/
tmp->next=tmp->next->next; //让tmp的指针next指向下下一个结点,将tmp后面紧接着的那个结点删除
return pointer; //将新的链表pointer返回
}
}
void selection_sort(link pointer,int num)//选择排序
{ link tmp,btmp;
int i,min;
for(i=0;i<num;i++)
{
tmp=pointer; //将poiner赋值给tmp
min=tmp->data; //将tmp头结点的数据赋值给min
btmp=NULL; //将btmp赋值为空(NULL)
while(tmp->next) //当tmp->next不为空(NULL),执行while语句
{ if(min>tmp->next->data) //如果min的值比tmp->next的数值大
{min=tmp->next->data; //将tmp->next的值赋值给min
btmp=tmp;//将头结点赋值给btmp
}
tmp=tmp->next;//将tmp->next(即头结点的下一个结点)赋值给tmp,以便下次遍历从tmp开始,
}
printf("\40: %d\n",min);//输出链表中的最小数据 ,""内为控制输出格式的设置
pointer=delete_node(pointer,btmp);//调用函数删除接点
}
}
link create_list(int array[],int num) //创建链表
{ link tmp1,tmp2,pointer;
int i;
pointer=(link)malloc(sizeof(node));//调用malloc关键字申请一段内存空间,长度为node型结构的大小,用(link)强制转换为link型,然后将该存储空间给pointer.
pointer->data=array[0];//将数组array[]的第0个值赋值给pointer的头结点数据.
tmp1=pointer;//将pointer赋值给tmp1.
for(i=1;i<num;i++) //for循环
{ tmp2=(link)malloc(sizeof(node));//如上类似意义
tmp2->next=NULL; //tmp2的next指针赋值为空(NULL)
tmp2->data=array[i]; //tmp2的数据赋值为数组array[]的第i个元素的值
tmp1->next=tmp2;//将tmp1的next指针指向tmp2
tmp1=tmp1->next; //将tmp1指针下移一个
}
return pointer; //返回pointer
}
link concatenate(link pointer1,link pointer2)
{ link tmp;
tmp=pointer1; //pointer1的表头赋值给tmp
while(tmp->next) //tmp->next为真,即tmp的下一个不为空(NULL),执行循环语句
tmp=tmp->next;//tmp头指针指向下一个
tmp->next=pointer2; //pointer2的表头赋值给tmp的后面一个
return pointer1; //返回pointer1
}
void main(void)
{ int arr1[]={3,12,8,9,11};//定义一个整型数组并赋值
link ptr;
ptr=create_list(arr1,5); //函数调用
selection_sort(ptr,5);
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式