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

请各个位高手帮小弟解释下下面的程序每句含义最好详细一些谢谢大侠们了!#include<stdlib.h>#include<stdio.h>structlist{intda... 请各个位高手帮小弟解释下下面的程序每句含义 最好详细一些
谢谢大侠们了!
#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);
}
展开
 我来答
lulufaer
2007-12-25 · 超过24用户采纳过TA的回答
知道答主
回答量:89
采纳率:0%
帮助的人:0
展开全部
#include<stdlib.h>//包含头文件stdlib.h
#include<stdio.h>//包含头文件stdio.h
struct list//定义一个结构体 链表
{ int data;//链表包含一个整形数据
struct list *next;//声明一个指向下一个结构体对象的指针
};
typedef struct list node;
//说明由node所定义的数据类型都是struct list类型的,即
//node是struct list数据类型的一个别名
typedef node *link;//说明由link定义的数据类型都是
// node *类型的,是指针
link delete_node(link pointer,link tmp)
//定义一个删除结点的函数,返回值为link型的,是指针,括号里是参数
{if (tmp==NULL) /*delete first node*/
//if条件判断语句,判断链表是否为空
return pointer->next;
//如果为空,返回结点next指针,为空指针
else
//如果tmp链表不为空
{ if(tmp->next->next==NULL)/*delete last node*/
//条件判断,如果下一个结点为空
tmp->next=NULL;
//当前结点为空,即删除当前结点
else /*delete the other node*/
//条件判断,如果下一个结点不为空
tmp->next=tmp->next->next;
//找下一个结点
return pointer;
//返回头链表tmp的头指针
}
}
void selection_sort(link pointer,int num)
//定义一个选择排序的函数,没有返回类型
{ link tmp,btmp;
//定义两个指向结构体list的指针
int i,min;
//声明两个整型数据,min表示结点的最小值
for(i=0;i<num;i++) //进入for循环,i=num时结束
{
tmp=pointer;
//tmp指向链表的第一个地址,pointer为链表头针
min=tmp->data;
//给min赋值为第一个结点的data值
btmp=NULL;
//指针为空
while(tmp->next) //循环如果后面还有结点,
{ if(min>tmp->next->data)
//如果前面一个结点的值大于后面结点值
{min=tmp->next->data;
//最小值min等于下个结点值,min值是记录前面
//比较过的结点中的最小值,并把它记录在当前的结点上
btmp=tmp; //记住btmp当前循环到的结点的地址,
//以便tmp指针寻找下一个结点,获得下一个结点的
//值与上一个结点值继续比较
}
tmp=tmp->next; //tmp指向下一个结点
}
printf("\40: %d\n",min); //打印最小结点值
pointer=delete_node(pointer,btmp);
//调用删除结点函数
}
}
link create_list(int array[],int num)
//创建有num个结点的链表
{ link tmp1,tmp2,pointer;
int i;
pointer=(link)malloc(sizeof(node));
//分配链表第一块内存,malloc动态分配内存函数,sizeof(node)计算node的大小
pointer->data=array[0];
//用数组的第一个值填充链表的data值
tmp1=pointer;
//将pointer的值赋给tmp1,tmp1将指向刚才分配的内存
for(i=1;i<num;i++) //for循环,创建另外num-1个结点
{ tmp2=(link)malloc(sizeof(node));
//分配一块新的内存
tmp2->next=NULL;
//内存下一个结点设为空值,不指向任何内存
tmp2->data=array[i];
//给结点的数据赋值
tmp1->next=tmp2;
//上一块结点的next指针指向新分配的内存
tmp1=tmp1->next;
//tmp1指向新分配的内存,作用是当tmp2开辟下一个内存时,tmp1记住tmp2的上一个结点,
//并且让tmp1指向的当前结点的next指针指向新的结点,这样就能使所有的结点的next指针都指向
//后面的结点,而不会使新开辟的内存(结点)丢失
}
return pointer; //返回头链表的头指针
}
link concatenate(link pointer1,link pointer2)
定义一个合并两个链表的函数
{ link tmp;
tmp=pointer1; //tmp指向头指针的指向的内存
while(tmp->next) //while循环,判断是否后面还有结点
tmp=tmp->next; //寻找下个结点,直到最后一个结点
tmp->next=pointer2;
//最后结点指向第二个链表的头针,将两个链表合并
return pointer1; //返回合并后新链表头针
}
void main(void)
{ int arr1[]={3,12,8,9,11};
link ptr; //建立链表指针ptr
ptr=create_list(arr1,5);
//调用create—list()创建一个有5个结点的链表,ptr是新链表的头指针
selection_sort(ptr,5); //调用selection_sort(),找prt指向的链表的最小结点值
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友bf6b20ff6e1
2007-12-24 · TA获得超过3000个赞
知道小有建树答主
回答量:582
采纳率:0%
帮助的人:524万
展开全部
有空再帮你看。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式