#include <iostream>
#include <malloc.h>
using namespace std;
const int FLAG = -1;
typedef struct DNode{
int data;
struct DNode *prior, *next;
int freq;
}DNode, *DLinkList;
DLinkList List_Insert(DLinkList &L) {
DLinkList s, p=NULL;
int x;
L = (DLinkList)malloc(sizeof(DNode));
L->next = L->prior = L;
p = L;
while(cin>>x && x!=FLAG) {
s = (DLinkList)malloc(sizeof(DNode));
s->data = x;
s->freq = 0;
s->next = p->next;
p->next = s;
L->prior = s;
s->prior = p;
p = s;
}
return L;
}
void listSort(DLinkList &L, DLinkList p){
DLinkList p1 = L->next;
while(p1->freq > p->freq)
p1 = p1->next;
DLinkList t1 = p->prior;
DLinkList t2 = p->next;
t1->next = t2;
t2->prior = t1;
p1->prior->next = p;
p->next = p1;
p->prior = p1->prior;
p1->prior = p;
}
void locate(DLinkList &L, int data){
if(L->next == L)
return;
DLinkList p = L->next;
while(p != L){
if(p->data == data){
p->freq += 1;
break;
}
p = p->next;
}
listSort(L, p);
}
void printList(DLinkList L){
DLinkList p = L->next;
while(p != L){
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
void printList1(DLinkList L){
DLinkList p = L->prior;
while(p != L){
cout << p->data << " ";
p = p->prior;
}
cout << endl;
system("pause");
}
int main(){
DLinkList L;
List_Insert(L);
printList(L);
locate(L, 5);
printList(L);
locate(L, 4);
printList(L);
locate(L, 5);
printList(L);
locate(L, 3);
printList(L);
return 0;
}