#include <stdio.h>
#include <stdlib.h>
#define MAXNUM 1e6
typedef struct DNODE
{
char c;
struct DNODE *prior ,*next;
int freg;
}DNODE;
DNODE* create_list()
{
DNODE *p = (DNODE*)malloc(sizeof(DNODE));
p ->prior = NULL;
p ->next = NULL;
p->freg = MAXNUM;
return p;
}
void insertDNode(DNODE *L,int m) //第一个节点要特殊插入
{
DNODE *s=L->next;
while(m--)
{
DNODE *p = (DNODE*)malloc(sizeof(DNODE));
char c;
do
{
scanf("%c",&c);
}while(c == ' ' || c == '\n');
p->c = c;
p->freg = 0;
p->next = s->next;
p->prior = s;
s->next = p;
s = p;
}
}
void printlist(DNODE *L)
{
DNODE *p=L->next;
while(p)
{
printf("%c ",p->c);
p=p->next;
}
}
void LOCATE(DNODE *L, char x)
{
DNODE *p = L->next;
while(p&& p->c!=x)
{
p = p->next;
}
if(p->c==x)
{
p->freg ++;
}
while(p->freg >p->prior->freg) //头节点不会被换掉,不用慌
{
char t=p->c;
int tmp = p->freg;
p->c = p->prior->c;
p->freg = p->prior->freg;
p->prior->c = t;
p->prior->freg = tmp;
p=p->prior;
}
}
int main()
{
int m,n;
scanf("%d %d",&m,&n);
DNODE *L = create_list();
//第一个节点要特殊处理
{
char t;
do
{
scanf("%c",&t);
}while(t == ' ' || t == '\n');
DNODE *p =(DNODE*)malloc(sizeof(DNODE));
p->freg = 0;
p->c = t;
p->next =L->next;
p->prior = L;
L->next = p;
}
insertDNode(L,m-1);
fflush(stdin);
while(n--)
{
char x;
do
{
scanf("%c",&x);
}while(x == ' ' || x == '\n');
LOCATE(L,x);
}
printlist(L);
return 0;
}
数据结构理论课noj(6) LOCATE操作
于 2022-03-27 10:41:27 首次发布