/*设有一个带头结点的循环单链表,其结点值均为正整数。设计一个算法,反复找出单链表中结点值最小
的结点并输出,然后将该结点从中删除,直到单链表空为止,再删除表头结点。*/
#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
LinkList createHeadList(LinkList &L)
{
ElemType x;
L = (LinkList)malloc(sizeof(LNode));
LNode *r = L;
scanf("%d",&x);
while(x!=9999)
{
LNode *s = (LNode*)malloc(sizeof(LNode));
s->data = x;
r->next = s;
r = s;
scanf("%d",&x);
}
r->next = L;
return L;
}
bool printMin(LinkList &L)
{
LNode *pre,*p;
LNode *minpre,*min;
while(L->next!=L)
{
pre = L;
p = pre->next;
minpre = pre;
min = p;
while(p!=L){
if(min->data>p->data)
{
minpre = pre;
min = p;
}
pre = p;
p = p->next;
}
printf("%d ",min->data);
minpre->next = min->next;
free(min);
}
free(L);
return true;
}
bool printList(LinkList L)
{
LNode *p = L->next;
while(p!=L)
{
printf("%d ",p->data);
p = p->next;
}
printf("\n");
return true;
}
void main()
{
LinkList L;
createHeadList(L);
printList(L);
printf("依次输出最小值:\n");
printMin(L);
printf("\n");
}
依次输出最小值
最新推荐文章于 2023-11-17 11:17:43 发布
这段代码实现了一个带头结点的循环单链表,用于存储正整数。程序首先创建链表,然后按顺序输出所有元素。接着,它会找到链表中最小的元素并删除,直至链表为空,最后删除头结点。此过程展示了链表操作和查找最小元素的基本算法。
1517

被折叠的 条评论
为什么被折叠?



