• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            隨感而發

            雜七雜八

            統計

            留言簿(13)

            閱讀排行榜

            評論排行榜

            用數組模擬指針和對象

            今天學習了用沒有指針和結構體的情況下用數組來實現類似的操作。他的思路和指針是一樣的,只不過指針指向的是地址,他指向的是數組的下標。其他方式都一樣。還有就是必須要自己實現分配和釋放的函數,從數組中分配對象和釋放對象。也要自己維持一張空閑數據表。
            這也是書上的例子。廢話少說,奉上源代碼:
            #include <stdio.h>
            #include 
            <stdlib.h>

            int g_key[100];
            int g_next[100];
            int g_pre[100];
            int g_free = 0;
            int g_head = 0;


            //初始化數據空間。
            int Init()
            {
                
            //將所有數據都添加到未分配表中
                for (int i = 0; i < 100++i)
                
            {
                    g_next[i] 
            = i + 1;
                    g_pre[i] 
            = i - 1;
                }


                g_free 
            = 1;    //為分配的頭開始指向1,0下標作為空處理。
                g_next[99= 0;    //最后一個next指向0

                
            return 0;
            }


            //分配對象,返回對象的下標。
            int AllocateObject()
            {
                
            if (g_free == 0)    //如果沒有未分配的空間,返回0
                {
                    
            return 0;
                }


                
            int i = g_free;     //從未分配表中分配對象空間。
                g_free = g_next[g_free];    //把分配的空間從未分配表中分離。
                g_next[i] = 0;            //初始分配的空間
                g_pre[i] = 0;
                g_key[i] 
            = 0xcccccccc;
                
            return i;    //返回空間下標。
            }


            //釋放對象
            int freeObject(int i)
            {
                g_next[i]  
            = g_free;    //把它加入到未分配表中
                g_pre[i] = 0;
                g_free 
            = i;
                
            return 1;
            }


            //判斷鏈表是否為空
            int IsEmpty()
            {
                
            return g_head == 0;
            }


            //清空鏈表
            int Clear()
            {
                
            int i = g_next[g_head];
                
            while(g_head != 0)
                
            {
                    i 
            = g_next[g_head];
                    freeObject(g_head);
                    g_head 
            = i;
                }

                
            return 1;
            }


            //插入數據到鏈表中
            int Insert(int nData)
            {
                
            int i = AllocateObject();
                g_key[i] 
            = nData;
                g_pre[i] 
            = 0;
                g_next[i] 
            = g_head;
                g_head 
            = i;
                
            return g_head;
            }


            //查找數據
            bool Find(int nData)
            {
                
            int i = g_head;
                
            while (i != 0)
                
            {
                    
            if (g_key[i] == nData)
                    
            {
                        
            return true;
                    }

                    i 
            = g_next[i];
                }


                
            return false;
            }


            //刪除數據。
            bool Delete(int nData)
            {
                
            int i = g_head;
                
            while (i != 0)
                
            {
                    
            if (g_key[i] == nData)
                    
            {
                        
            if (g_pre[i] != 0)
                        
            {
                            g_next[g_pre[i]] 
            = g_next[i];
                        }

                        
            else
                        
            {
                            g_head 
            = g_next[i];
                        }


                        
            if (g_next[i] != 0)
                        
            {
                            g_pre[g_next[i]] 
            = g_pre[i];
                        }


                        freeObject(i);
                        
            return true;
                    }

                    i 
            = g_next[i];
                }

                
            return false;
            }



            int main()
            {
                Init();
                
            //測試,
                for (int i = 0; i < 10++i)
                
            {
                    Insert(i);    
            //插入數據
                }


                
            if (Find(5)) //查找數據
                {
                    printf(
            "Yes!\n");
                }

                
            if (!Find(11))
                
            {
                    printf(
            "No!\n");
                }


                
            while(!IsEmpty())    //逐一刪除數據
                {
                    printf(
            "%d ", g_key[g_head]);
                    Delete(g_key[g_head]);
                }

                printf(
            "\n");
                
            for (int i = 0; i < 10++i)
                
            {
                    Insert(i);
                }


                Clear();        
            //清空數據。
                if (IsEmpty())
                
            {
                    printf(
            "Empty!\n");
                }


                
            int i = g_free;
                
            while(i)
                
            {
                    printf(
            "%d ", i);
                    i 
            = g_next[i];
                }

                printf(
            "\n");

                system(
            "pause");
                
            return 0;
            }

            posted on 2009-05-04 18:37 shongbee2 閱讀(895) 評論(2)  編輯 收藏 引用 所屬分類: 數據結構和算法

            評論

            # re: 用數組模擬指針和對象 2009-05-04 18:41 陳梓瀚(vczh)

            你可以嘗試用數組去模擬一些struct……  回復  更多評論   

            # re: 用數組模擬指針和對象 2009-05-04 19:37 shongbee2

            @陳梓瀚(vczh)
            哦。謝謝,不過書上只是提到了這些,我也覺得這個其實沒有太大的意義,也就只是簡單模擬了一下。您可以把它看做struct的,只不過他是三個數組合起來是一個struct,而不是傳統的連續空間。呵呵。
            有空去實踐一下,謝謝哈。。呵呵。。
              回復  更多評論   

            久久综合久久伊人| 久久亚洲精品无码VA大香大香| 久久久久18| 亚洲欧美久久久久9999| 久久人人爽人人爽人人AV东京热| 日产精品久久久久久久| 91精品国产9l久久久久| 久久久久久久国产免费看| 久久久久久久综合日本| 色综合久久久久无码专区 | 国产亚州精品女人久久久久久| 久久综合久久综合亚洲| 久久九九全国免费| 精品国产乱码久久久久久呢 | 四虎影视久久久免费| 精品午夜久久福利大片| 丁香色欲久久久久久综合网| 久久精品亚洲乱码伦伦中文| 亚洲精品乱码久久久久久自慰| 伊人久久综合热线大杳蕉下载| 久久天堂AV综合合色蜜桃网| 久久国产视屏| 久久97精品久久久久久久不卡| 日本高清无卡码一区二区久久| 精品免费久久久久久久| 亚洲国产精品久久电影欧美| 久久99国产一区二区三区| 久久精品国产亚洲av影院| 无码人妻久久久一区二区三区| 久久精品这里只有精99品| 东京热TOKYO综合久久精品| 久久AV高潮AV无码AV| 久久精品国产WWW456C0M| 99热成人精品热久久669| 久久亚洲AV成人无码软件| 久久乐国产精品亚洲综合| a级毛片无码兔费真人久久| 国产成人精品久久亚洲高清不卡 | 久久精品国产亚洲av麻豆色欲| 国产免费久久精品99re丫y| 久久久精品久久久久久|