早教吧作业答案频道 -->其他-->
创建一个三个域的单链表,data,freq,next指针。freq表示访问该数据元素的频度,每构建一个结点,频度初始化为0,每访问一次频度加1,并将频度按由大到小的顺序排序。这个题目怎么做?
题目详情
创建一个三个域的单链表,data,freq,next指针。freq表示访问该数据元素的频度,每构建一个结点,频度初始化为0,每访问一次频度加1,并将频度按由大到小的顺序排序。这个题目怎么做?
▼优质解答
答案和解析
#include
#include
#define TDATA int
typedef struct _DNode{
struct _DNode *next;
TDATA data;
unsigned int freq;
}*PList;
PList Locate(PList L,TDATA e);
void Display(PList L);
void main()
{
PList LHead=NULL,p;
int i=1;
//creat a list,have a head node
LHead=(PList)malloc(sizeof(struct _DNode));
LHead->data=-1;
LHead->next=NULL;
LHead->freq=0;
do{
p=(PList)malloc(sizeof(struct _DNode));
if(p==NULL)break;
p->freq=0;
p->data=i;
p->next=LHead->next;
LHead->next=p;
}while(i++< 8 );
do{
printf("\nInput a int:");
fflush(stdin);
scanf("%d",&i);
p=Locate(LHead,i);
if(p==NULL)printf("Can't fand the %d\n",i);
else printf("Find the data %d, freq=%d\n",i,p->freq);
Display(LHead);
}while(i>=0);
}
PList Prev(PList L,PList pos)
{
PList p=L;
while((p!=NULL)&&(p->next!=pos)) p=p->next;
return p;
}
void Insert(PList L,PList pos,PList node)
{//insert node before pos
PList p=Prev(L,pos);
if(!p)return;
p->next=node;
node->next=pos;
}
void Delete(PList L,PList pos)
{//delete pos
PList p=Prev(L,pos);
if(!p)return;
p->next=pos->next;
}
PList Locate(PList L,TDATA e)
{
PList p=L->next,q=L->next;
while(p!=NULL&&p->data!=e) p=p->next;
if(p==NULL)return NULL;
p->freq++;
Delete(L,p);
q=L->next;
while(q!=NULL&&(q->freq>p->freq)) q=q->next;
Insert(L,q,p);
return p;
}
void Display(PList L)
{
PList p=L->next;
int i=1;
while(p)
{
printf("No.%d Node:Data:%d,Freq:%d\n",i++,p->data,p->freq);
p=p->next;
}
}
#include
#define TDATA int
typedef struct _DNode{
struct _DNode *next;
TDATA data;
unsigned int freq;
}*PList;
PList Locate(PList L,TDATA e);
void Display(PList L);
void main()
{
PList LHead=NULL,p;
int i=1;
//creat a list,have a head node
LHead=(PList)malloc(sizeof(struct _DNode));
LHead->data=-1;
LHead->next=NULL;
LHead->freq=0;
do{
p=(PList)malloc(sizeof(struct _DNode));
if(p==NULL)break;
p->freq=0;
p->data=i;
p->next=LHead->next;
LHead->next=p;
}while(i++< 8 );
do{
printf("\nInput a int:");
fflush(stdin);
scanf("%d",&i);
p=Locate(LHead,i);
if(p==NULL)printf("Can't fand the %d\n",i);
else printf("Find the data %d, freq=%d\n",i,p->freq);
Display(LHead);
}while(i>=0);
}
PList Prev(PList L,PList pos)
{
PList p=L;
while((p!=NULL)&&(p->next!=pos)) p=p->next;
return p;
}
void Insert(PList L,PList pos,PList node)
{//insert node before pos
PList p=Prev(L,pos);
if(!p)return;
p->next=node;
node->next=pos;
}
void Delete(PList L,PList pos)
{//delete pos
PList p=Prev(L,pos);
if(!p)return;
p->next=pos->next;
}
PList Locate(PList L,TDATA e)
{
PList p=L->next,q=L->next;
while(p!=NULL&&p->data!=e) p=p->next;
if(p==NULL)return NULL;
p->freq++;
Delete(L,p);
q=L->next;
while(q!=NULL&&(q->freq>p->freq)) q=q->next;
Insert(L,q,p);
return p;
}
void Display(PList L)
{
PList p=L->next;
int i=1;
while(p)
{
printf("No.%d Node:Data:%d,Freq:%d\n",i++,p->data,p->freq);
p=p->next;
}
}
看了 创建一个三个域的单链表,da...的网友还看了以下:
1:某公园在开门前有300人等候,开门后每分钟来的人数是固定的,一个门每分钟可以进5人,如果开放4 2020-04-11 …
将奇数按如下顺次排列1571921391723…111525…1327…2933…31…在这样的排 2020-04-22 …
100个数排成一排,除了两端的两个数外,其余每个数的3倍都等于它左右两旁两个数的和,这一排数的最左 2020-04-26 …
求C#源码,简单的排列组合题,如下:7、编一个程序,从三个红球,五个白球,六个黑球中任意取出八个球 2020-05-13 …
在食堂门口装的排风装置有什么用?冬天了,食堂的门口都挂上了厚厚的门帘,它跟门帘上方的排风装置有关系 2020-05-13 …
一个水池装有大小两种型号的排水管若干个,若开放2个大管和3个小管,每小时可排水12吨;若开放3个大 2020-05-13 …
如:1+2+3+...+n=n(n+1)/2;a选b的组合数为(a(a-1)(a-2)...(a- 2020-05-14 …
同学们排队时,只看到前面的一个同学,而看不到后面的同学队就站直了为什么同学们排队时,只看到前面的一 2020-05-15 …
化学计算题.烃燃烧的计算题答案等式求解CxHy+(x+y/4)O2→xO2+y/2H2O 1 44 2020-05-16 …
有六个数,知道其中的四个数是:0.525、百分之52.8、25分之16、20分之9,已知从大到小排 2020-05-17 …