基於二叉樹的區域網路MorseCode的發收程式

來源:互聯網
上載者:User

本周親愛的聶大帥給我們布置 了一個課題 

 

課題名:類比電報通訊要求:電報大家是都知道的。現在我想要大家用c語言做一個區域網路內的電報通訊軟體(無需介面,控制台程式即可)。中間會涉及到網路編程,摩爾斯電碼解析(就是字串處理)等知識。無需做的多複雜,我只要這些功能:1,電報功能的類比。能收,能回複。2,將重要訊息存檔處理。3,摩爾斯電碼的準確解析。無需中文,簡單的英文即可。(偷偷地引用一下)下面我就說說我是怎麼做的吧首先網路部分,這個比較簡單,看看例子,幾個函數的調用,看看說明,然後研究一下就OK了。(相信有同仁會寫這個的)存檔部分,也比較簡單,用一個二級針指,把所有資訊先記錄下來,然後看使用者有沒有需要,不要的話free就完事了。我想重點講講這個有趣的MorseCode(PS:這個一點一杠的真的很有意思,大家可以看看百度百科,還有一個段基於MorseCode的愛情)。好了,進入正題,其實MorseCode可不用要用枚舉的,那樣一個一個地寫多麻煩啊,下面我來介紹一種基於二叉樹實現的MorseCode。先讓大家看看一些符號的MorseCode有規律嗎?   答案是必然的!再看:    “嘀”聲代表一點,“噠”聲代表一橫線,聽到“嘀”就向右移動,聽到“噠”就向左移動。例如你聽到“噠嘀嘀”,就表示先向左一次,再向右兩次,就會去到D那裡。有規律 了吧,不信的可以自己去驗證一下!好,有了 這些基礎就是我們大展才華的奠基石了!下面看一段代碼:產生MorseCode樹


typedef struct tree

{

     char data;

     struct tree *leftchild;

     struct tree *rightchild;

} MorseCode;

#define LENTREE sizeof(MorseCode)

 

char morse[100]={'#','T','M','O',',','0','$','$','9','$','$','.','$','8','$','$','G','Q','$','$','Z',/

'$','7','$','$','N','K','Y','$','$','C','$','$','D','X','$','$','B','$','6','$','$','E','A','W','J',/

'1','$','$','$','P','$','$','R','$','L','$','$','I','U','-','2','$','$','$','F','$','$','S','V',/

'3','$','$','$','H','4','$','$','5','$','$'};

p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 15.0px Menlo}
span.s1 {color: #b72e9f}
span.s2 {color: #2f30d3}

int morse_x=-1;

void creat_tree(MorseCode **root)

{

     morse_x++;

     if (morse[morse_x] == '$') 

    {

         (*root) = NULL;

    }

    else 

    {

         (*root) = (MorseCode *) malloc (LENTREE);

         (*root)->data = morse[morse_x];

        creat_tree(&(*root)->leftchild);

        creat_tree(&(*root)->rightchild);

     }

     return ;

}

 


將字串轉為MorseCodevoid preorder_letterTOmorse(MorseCode *root,char *morsecode,char *letter,int i,int *j)<br />{<br />if (root)<br />{<br />if (root->data == letter[i])<br />{<br />morsecode[(*j)++] = ' ';<br />return ;<br />}<br />else<br /> {<br />morsecode[(*j)++] = '_';<br />preorder_letterTOmorse(root->leftchild,morsecode,letter,i,j);<br />if (morsecode[(*j)-1] == ' ') return ;<br />(*j)--;<br />morsecode[(*j)++] = '.';<br />preorder_letterTOmorse(root->rightchild,morsecode,letter,i,j);<br />if (morsecode[(*j)-1] == ' ') return ;<br />(*j)--;<br />if (morsecode[(*j)] == ' ') return ;<br />}<br />}<br />return ;<br />}<br />void letterTOmorse(MorseCode *root, char **morsecode,char *letter)<br />{<br />(*morsecode) = (char *) malloc(sizeof(char)*100);<br />strnset((*morsecode),'0',100);<br />int i=0,j=0;<br />while (letter[i]!='/0')<br />{<br />preorder_letterTOmorse(root,*morsecode,letter,i,&j);<br /> i++;<br />}<br />(*morsecode)[j]='/0';<br />}<br />

 

將MorseCode轉為字串char preorder_morseTOletter(MorseCode *root,char *temp,int *j)<br />{<br /> (*j)++;<br /> char result;<br /> if (root)<br />{<br /> if (temp[*j]=='/0')<br /> {<br /> return root->data;<br /> }<br /> if (temp[*j]=='_')<br /> {<br /> result=preorder_morseTOletter(root->leftchild,temp,j);<br /> if (temp[*j]=='/0')<br /> {<br /> return result;<br /> }<br /> }<br /> if (temp[*j]=='.')<br /> {<br /> result=preorder_morseTOletter(root->rightchild,temp,j);<br /> if (temp[*j]=='/0')<br /> {<br /> return result;<br /> }<br /> }<br /> }<br />}<br />void morseTOletter(MorseCode *root, char *morsecode,char **letter)<br />{<br /> (*letter) = (char *) malloc(sizeof(char)*100);<br /> char *temp = (char *) malloc(sizeof(char)*10);<br /> int i=0,j=0,k=0;<br /> while ( morsecode[i]!='/0')<br /> {<br /> j=0;<br /> while(morsecode[i]=='.' || morsecode[i]=='_')<br /> {<br /> temp[j++]=morsecode[i++];<br /> }<br /> temp[j]='/0';<br /> if ( morsecode[i]=='/0')<br /> {<br /> break;<br /> }<br /> else<br /> {<br /> i++;<br /> }<br /> j=-1;<br /> (*letter)[k++]=preorder_morseTOletter(root,temp,&j);<br /> }<br /> (*letter)[k]='/0';<br /> free(temp);<br /> return ;<br />}<br /> 有了這些代碼,是不是很方便地轉換了?還有就是,要加入更多字元的資訊只要在建立樹的時候加一字元就OK了,加上樹的搜尋效率,是不是感覺很爽啊!        最後,求交流!!!

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.