• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 程序員考試補課筆記-第十三天

    發表于:2007-05-26來源:作者:點擊數: 標簽:
    今天特別的興奮,起床也起得特別的早。在走之前我把電腦開了,那當然是為了做 服務器 ,我不知道我開學后能不能夠這樣做,因為家里的一些因素。不過只要能為大家服務我已經很開心了,而且也一種強激的幸福感,這種幸福并不是一般的家庭幸福。我為堅持做下去

      今天特別的興奮,起床也起得特別的早。在走之前我把電腦開了,那當然是為了做服務器,我不知道我開學后能不能夠這樣做,因為家里的一些因素。不過只要能為大家服務我已經很開心了,而且也一種強激的幸福感,這種幸福并不是一般的家庭幸福。我為堅持做下去的,我也常常問一些網友關于這件事,他們都說只有你自己可以就行了,他們都支持我堅持做下去。好吧,說遠了離題了,我說說今天的補課吧。

      今天的課程也令我吃了一驚,是講數據結構里的樹。為什么隊列和堆棧都沒有講就直接講樹呢?會不會太快了一點,而且我們剛放完假有些人都沒有集中精神到課堂來。不過我會相信老師的選擇的,應該有他的理由。那么就來講講樹的一些基本概念,大家都知道樹是數據結構里的非線性結構之一,和之前說的鏈表是完全不同的,鏈表就只有前驅和后繼結點,但樹就不是了,他可以有很多的結點,稱為分支結點,而且他的分支結點又可以有分支結點。因為樹接觸到的概念太多了,只好自己看一下書才行。樹運用得很廣范,像我們操作系統里文件管理就是了,多級的目錄。二級目錄就像樹的子樹,而且子樹里可能還有很多的子樹,越往下就越多級。

      我們來試試定義一個樹的結構,一般樹都分得很隨意,所有我們這里也隨便畫一個樹來說一下??磮D第十三天圖一我們看到圓圈就代表一個結點,而且最頂的那個就是根結點,往下的就是子結點。子結點的上一個就是父結點,同一級的結點左右都是為兄弟結點。我們按照這樣的結構定義一個,如下:
      struct tree
      {
        int data;
        struct tree *next; /*右兄弟結點*/
        struct tree *pre; /*左兄弟結點*/
        struct tree *up; /*父結點*/
        struct tree *down; /*子結點*/
      };
    下面來看看如何建立一棵樹。
      struct tree *p,*r;
      r=(struct tree *)malloc(sizeof(struct tree)); /*建立根結點空間*/
      r->data=3; /*根結點賦值*/
      r->next=r->pre=r->up=NULL;
      p=(struct tree *)malloc(sizeof(struct tree)); /*建立第二個結點*/
      r->down=p; /*根結點的子結點連向新的子結點*/
      p->data=5; /*子結點賦值*/ 
      p->pre=NULL;
      p->next=(struct tree *)malloc(sizeof(struct tree));
      p->next->data=2;
      p->next->pre=p;
         :
         :
         :
      因為結點多而無規律性,所有這種建立方法是不能采用的,現在只是拿出來研究一下一棵樹是如何建立起來的。

      現在說說另一種樹“二叉樹”。因為二叉樹與一般的樹結構比較,二叉樹在結構上更規范和更有確定性,因此,應用也比樹更為廣泛。二叉樹與樹不同,首先二叉樹可以為空,空的二叉樹沒有結點;另外,在二叉樹中,結點的子樹是有序的,分左、右兩棵子二叉樹。
    二叉樹又是如何建立的呢?這里很簡單,因為二叉樹有其規律性,下面請看
      typedef struct bnode
      {
        int data;
        struct bnode *left,*right;
      }btree;

      void creat(btree *b)
      {
        int x;
        btree *s;
        b=NULL;
      do
      {
        scanf("%d",&x);
        s=(btree *)malloc(sizeof(btree));
        s->data=x;
        s->left=s->right=NULL;
        insert(b,s);
      }
    }

      void insert(btree *b,btree *s)
      {
        if(b==NULL) b=s;
        else if(s-data==b->data) return();
        else if(s-data<b->data) insert(b->left,s);
        else if(s-data>b->data) insert(b->right,s);
      }
      這條程序不單只建立了一個樹,而且還給排好了序(左小右大)。輸入相應的數值看看結果,如圖第十三天圖二。
      今天也就是這些了,還有得就是要多看些遞歸的程序,因為樹的建立和操作離不開遞歸。還有的就是大家做做如下一題,就是已知有一個無序的二叉樹,讓我們用中序遍歷排列成由大到小的程序。大家一齊起吧,寫好發答案到我的論壇上http://zhgpa.vicp.net或者E-mail:zhgpa@sohu.com多謝大家支持。


    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>