数据结构关于单链表算法问题
发布网友
发布时间:2022-05-03 01:37
我来回答
共1个回答
热心网友
时间:2022-04-24 08:13
typedef
int
ElemType;
typedef
struct
LNode
/*定义链表结点类型*/
{
ElemType
data;
struct
LNode
*
next;
}LNode,
*
LinkList;
void
Output_des(LinkList
*head)
{//按值递减的次序逐个输出head中各结点的数据元素,同时释放该结点空间。利用简单的插入排序思想。
LNode
*q,*pre_q,*p,*pre_p;//q指向元素值最大的结点,pre_q指向q结点的前驱结点,pre_p指向p所指结点的前驱
while((*head)->next!=NULL)
{//单链表不空,输出表中元素
q=(*head)->next
;//初始化q指向第一个结点
pre_q=(*head);//pre_q指向q的前驱即头结点
p=q->next
;//p指向q的后继结点
pre_p=q;
while(p!=NULL)
{//找出链表中值最大的结点
if(p->data>q->data)
{//如果p所指结点的元素值大于q所指结点的元素值,那么将q指向p所指的结点,同时移动pre_q
pre_q=pre_p;
q=p;
}
pre_p=p;
p=p->next;//p和pre_p移动到下一个结点
}
printf("%d\t",q->data);//输出元素值
pre_q->next=q->next;//删除最大的结点q
free(q);//释放该结点
}
free(*head);//释放头结点
}