1102: 顺序表上数据的划分问题的实现
题目描述
建立一个顺序表L,然后以第一个为分界,将所有小于等于它的元素移到该元素的前面,将所有大于它的元素移到该元素的后面。
输入
顺序表长度n; 顺序表中的数据元素。
输出
移动后的数据元素。
样例输入
10
32 5 22 43 23 56 54 57 11 25
样例输出
25 11 23 22 5 32 43 56 54 57
#include<bits/stdc++.h>
# define maxsize 50
using namespace std;
struct link
{
int data;
link *next;
};
void creat(link *&p)
{
p=new link;
p->next=NULL;
}
void store(link *&p,int a[],int num)
{
link *l=p,*s;
for(int i=0;i<num;i++)
{
s=new link;
s->data=a[i];
s->next=NULL;
l->next=s;
l=s;
}
}
void divide(link *&p)
{
link *l1,*l2,*l3,*l4;
l1=p ,l2=p->next;
l3=p->next ,l4=l3->next; //同步指针
while(l4!=NULL)
{
if(l4->data<=l2->data)
{
l3->next=l4->next;
l4->next=l1->next;
l1->next=l4; //让l4插在头结点后
l4=l3->next;
}
else
{
l3=l3->next;
l4=l4->next;
}
}
}
void Cout(link *&p)
{
link *l=p->next;
while(l!=NULL)
{
cout << l->data <<' ';
l=l->next;
}
}
int main()
{
int num,a[maxsize];
cin >> num;
for(int i=0;i<num;i++)
{
cin >> a[i];
}
link *p;
creat(p);
store(p,a,num);
divide(p);
Cout(p);
return 0;
}