#include<iostream>
#include<iomanip>
using namespace std;
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status; //Status 是函数返回值类型,其值是函数结果状态代码。
typedef int ElemType; //ElemType 为可定义的数据类型,此设为int类型
typedef struct LNode {
ElemType data; //结点的数据域
struct LNode *next; //结点的指针域
} LNode, *LinkList; //LinkList为指向结构体LNode的指针类型
void CreateList_R(LinkList &L, int n) //算法2.12 后插法创建单链表
{
/****在此下面完成代码***************/
/***********************************/
}
void ListSort(LinkList &L)
{
/****在此下面完成代码***************/
/***********************************/
}
void ListPrint(LinkList L)
{
LNode *p;
for(p = L->next; p; p = p->next)
cout << p->data << (p->next ? ' ' : '\n');
}
int main()
{
LinkList L;
int n;
cin >> n;
CreateList_R(L, n);
ListSort(L);
ListPrint(L);
}
输入包括两行。
第一行是一个整数n,表示链表中的元素个数。
第二行是n个空格分开的整数,为各元素值。
具体见样例。
5 4 3 1 5 2
1 2 3 4 5
这个可以用于理解
//这个是以C语言的 冒泡排序法 可以进行解决
#include<iostream>
#include<iomanip>
using namespace std;
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status; //Status 是函数返回值类型,其值是函数结果状态代码。
typedef int ElemType; //ElemType 为可定义的数据类型,此设为int类型
typedef struct LNode {
ElemType data; //结点的数据域
struct LNode *next; //结点的指针域
} LNode, *LinkList; //LinkList为指向结构体LNode的指针类型
void CreateList_R(LinkList &L, int n) //算法2.12 后插法创建单链表
{
int i;
L = new LNode;
L->next = NULL;
LinkList r,p;
r = L;
for(i=0;i<n;i++)
{
p = new LNode;
cin >> p->data;
p->next = NULL;
r->next = p;
r = p;
}
}
void ListSort(LinkList &L)
{
LinkList p,q;
int t;
for(p = L->next; p; p = p->next)
for(q = p->next; q; q = q->next)
{
if(q->data<p->data)
{
t=p->data;
p->data=q->data;
q->data=t;
}
}
}
void ListPrint(LinkList L)
{
LNode *p;
for(p = L->next; p; p = p->next)
cout << p->data << (p->next ? ' ' : '\n');
}
int main()
{
LinkList L;
int n;
cin >> n;
CreateList_R(L, n);
ListSort(L);
ListPrint(L);
}
第二种就是以链表的形式来搞
#include<iostream>
#include<iomanip>
using namespace std;
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status; //Status 是函数返回值类型,其值是函数结果状态代码。
typedef int ElemType; //ElemType 为可定义的数据类型,此设为int类型
typedef struct LNode {
ElemType data; //结点的数据域
struct LNode *next; //结点的指针域
} LNode, *LinkList; //LinkList为指向结构体LNode的指针类型
void CreateList_R(LinkList &L, int n) //算法2.12 后插法创建单链表
{
/****在此下面完成代码***************/
{
L=new LNode;
L->next=NULL;
int i;
LinkList p=L;
for(i=1;i<=n;i++){
LinkList s;
s=new LNode;
scanf("%d",&s->data);
s->next=NULL;
p->next=s;
p=s;
}
}
/*********************************/
}
void ListSort(LinkList &L)
{
/****在此下面完成代码***************/
LinkList p,q,pre;
p = L->next;
L->next = NULL;
while(p)
{
q = p->next;
pre = L;
while(pre->next != NULL && pre->next->data < p->data) /*寻找最小值*/
pre = pre->next;/*地址移动*/
/*将p的下一个指向pre的下一个*/
p->next = pre->next;
/*此时pre为头结点,让pre的下一个指向p,连接起来*/
pre->next = p;
p = q;
}
/***********************************/
}
void ListPrint(LinkList L)
{
LNode *p;
for(p = L->next; p; p = p->next)
cout << p->data << (p->next ? ' ' : '\n');
}
int main()
{
LinkList L;
int n;
cin >> n;
CreateList_R(L, n);
ListSort(L);
ListPrint(L);
}
非常欢迎大家能在讨论区指出此文的不足处,作者会及时对文章加以修正 !如果有任何问题,欢迎评论,非常乐意为您解答!