當前位置:編程學習大全網 - 編程語言 - 高手進~~~小女不才,請編程高手幫忙~~~~只耽誤您壹下

高手進~~~小女不才,請編程高手幫忙~~~~只耽誤您壹下

#include<stdio.h>

#include<stdlib.h>

#define Maxsize 5

//////////////////////////// joseph環的函數 /////////////////////////////////////////////////////////

typedef struct data//定義壹個結構體“data”

{

int num; //用於存放人的序號

int val; //用於存放密碼

}typedata;

typedef struct node//定義壹個結構體(結點),其中包含壹個數據域和壹個指針域

{

struct data da; //結構體的嵌套

struct node *next;

}linknode;

linknode *head;

void huan()

{

head=(linknode*)malloc(sizeof(linknode));//申請壹個空間(頭結點 head)

int n,i,b,m,j;

linknode *p,*q,*temp;//定義兩個可以指向結點的指針

printf("輸入總人數:");

scanf("%d",&n);

p=head;

for(j=1;j<=n;j++)//本次循環主要是將每壹個人的數據(包括序號、密碼)存入循環鏈表中

{

q=(linknode*)malloc(sizeof(linknode));

p->next=q;

q->da.num=j;

printf("請輸入%d的密碼:",j);

scanf("%d",&m);

q->da.val=m;

p=p->next;

}

p->next=head->next;

p=p->next;

printf("請任意輸入壹個數m:");

scanf("%d",&m);

if(m<=0)

printf("輸入錯誤");

printf("出列順序是:");

while(p->next!=p)

{

for(i=1;i<m;i++)

{

q=p;

p=p->next;

}

b=p->da.num;

m=p->da.val;

printf("num:%-2dval:%-2d",p->da.num,p->da.val);

q->next=p->next;

temp=p;

p=p->next;

free(temp);

}

printf("num:%d\tval:%d\n",q->da.num,q->da.val); //輸出最後壹個結點

free(q); //釋放最後壹個結點

free(head); //釋放頭結點

printf("約瑟夫環結束,歡迎下次光臨~·~\n");

}

/////////////////////////////////////////// 哈夫曼樹的建立 ////////////////////////////////////////////////////////////////////

typedef struct

{

char data;

int weight;

int parent;

int lchild;

int rchild;

}HTNode;//哈夫曼樹結點的定義

HTNode ht[2*Maxsize-1];

void createHF(HTNode ht[],int n)

{

int i,k,lnode,rnode;

int min1,min2;

for(i=0;i<2*n-1;i++) //所有結點的parent lchild rchild 域賦值為-1

ht[i].parent=ht[i].lchild=ht[i].rchild=-1;

for(i=n;i<2*n-1;i++)

{

min1=min2=32767;

lnode=rnode=-1;

for(k=0;k<=i-1;k++)//隨著i的變化,非葉子節點也進入搜索範圍

if(ht[k].parent==-1)//在尚未構造二叉樹的結點中查找

if(ht[k].weight<min1)

{

min2=min1; rnode=lnode;

min1=ht[k].weight; lnode=k;

}

else if(ht[k].weight<min2)

{

min2=ht[k].weight; rnode=k;

}

ht[lnode].parent=i; ht[rnode].parent=i;

ht[i].weight=ht[lnode].weight+ht[rnode].weight;

ht[i].lchild=lnode; ht[i].rchild=rnode;

}

}

/*哈夫曼樹輸出函數此函數的輸出是根據構造的具體結構而做的,采用括號表示法輸出*/

void putHF(HTNode ht[],int n)

{

int flag=0,i=2*n-2;

printf("哈夫曼樹:\n");

printf("%2d",ht[i].weight);

for(;i>=0;i--)

if(ht[i].lchild!=-1)

{

printf("(%2d,%2d",ht[ht[i].lchild].weight,ht[ht[i].rchild].weight);

flag++;

}

else break;

for(i=flag;i>0;i--)

printf(")");

}

void main()

{

int n;

printf(" -*-*-*-*-*-*-*-*--進入哈夫曼樹創建模塊--*-*-*-*-*-*-*-*-*-*\n\n");

printf("Please input the number of nodes:\n");

scanf("%d",&n);

for(int i=0;i<n;i++)

{

printf("please input node %d weight:\n",i+1);

scanf("%d",&ht[i].weight);

}

createHF(ht,n);

putHF(ht,n);

printf("\n");

}

註冊個號這麽費勁~!!!

  • 上一篇:大數據需要學編程嗎?
  • 下一篇:陜西神木在四川樂山方向。
  • copyright 2024編程學習大全網