/**
* 用链表实现 王道P41 T19
*
* ①算法思想:
* 不断地从 L 中找到最小值输出并删除,
* 直到 L -> NEXT = L 结束。
*
* ②数据结构:
* typedef struct LNode{
int data;
struct LNode *next;
}LNode,*LinkList;
*
* ③算法设计
*/
#include <stdio.h>
#include <iostream>
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*LinkList;
void IncreasingPrint(LinkList &L){
while(L -> next != L){
LinkList p = L -> next,pre = L;
LinkList Minpre = pre,Minp = p;
while(p != L){
if(Minp -> data > p -> data){
Minp = p;
Minpre = pre;
}
pre = p;
p = p -> next;
}
Minpre -> next = Minp -> next;
printf("%d ",Minp -> data);
free(Minp);
}
free(L);
}
//以下为测试程序
//尾插法建立循环单链表(有头节点)
LinkList CreatCLinkListR(){
LinkList L = (LinkList)malloc(sizeof(LNode));//创建一个头结点,头指针L指向头节点
L -> next = L;//刚开始头节点后面没有节点,也就是整个链表为空,L 的 next 指向自己
L -> data = NULL;
LinkList p = L,q;
int data;
while(1){
scanf("%d",&data);
if(data == 99999)
break;
q = (LinkList)malloc(sizeof(LNode));
q -> data = data;
p -> next = q;
p = q;
p -> next = L;
}
return L;
}
//循环单链表的遍历(有头节点、无头结点)
//带头结点的传入 L -> next ,不带头结点的传入 L
LinkList Order(LinkList L){
while(L -> next != L){
printf("%d ",L -> data);
L = L -> next;
}
printf("\n");
}
int main(){
LinkList L = CreatCLinkListR();
// Order(L -> next);
IncreasingPrint(L);
return 0;
}
王道书 P41 T19(循环单链表实现)
于 2022-07-14 21:08:56 首次发布