#include<iostream>
using namespace std;
#define SIZE 100
typedef struct
{
int data;
int next;
}SLNode;
typedef struct
{
SLNode r[SIZE];
int length;
}SLinkListType;
void Build(SLinkListType &s)
{
int n,j,k;
s.r[0].data = 100000;
cout << "请输入你要输入的数的总数" << endl;
cin >> s.length;
for (int i = 1; i <= s.length; i++)
{
cout << "请输入第" << i << "个数" << endl;
cin >> s.r[i].data;
s.r[i].next = 0;
}
s.r[0].next = 1;
int flag = 1, flag1, flag2;
for (int i = 2;i <=s.length; i++)
{
flag1 = s.r[0].next;
if (s.r[i].data < s.r[flag1].data)//是否是第一个数
{
s.r[i].next = flag1;
s.r[0].next = i;
}
else if(s.r[i].data>s.r[flag].data)//是否是最后一个数
{
k = flag;
s.r[k].next = i;
s.r[i].next = 0;
flag = i;
}
else//在中间的情况
{
flag1 = s.r[0].next;
flag2 = s.r[flag1].next;
while (s.r[i].data > s.r[flag2].data)
{
flag1 = flag2;
flag2 = s.r[flag2].next;
}
s.r[i].next = s.r[flag1].next;
s.r[flag1].next = i;
}
}
}
void Arrage(SLinkListType &s)
{
int p, i, q;
p = s.r[0].next;
SLNode temp;
for (i = 1; i < s.length; i++)
{
while (p < i)//p如果小于i说明原来的下标是虚假的
p = s.r[p].next;
q = s.r[p].next;
if (p != i)
{
temp = s.r[p];
s.r[p] = s.r[i];
s.r[i] = temp;
s.r[i].next = p;
}
p = q;
}
}
void Print(SLinkListType s)
{
int i = s.r[0].next;
while (i != 0)
{
cout << s.r[i].data << " " << endl;
i = s.r[i].next;
}
}
void Print1(SLinkListType s)//打印调整后的
{
int i;
for (i = 1; i <= s.length; i++)
cout << s.r[i].data << endl;
}
int main()
{
SLinkListType s;
Build(s);
Print(s);
Arrage(s);
cout << "调整后的" << endl;
Print1(s);
}