• <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,而不是傳統的連續空間。呵呵。
            有空去實踐一下,謝謝哈。。呵呵。。
              回復  更多評論   

            久久精品无码午夜福利理论片| 日本久久久精品中文字幕| 亚洲欧洲中文日韩久久AV乱码| 久久久久国产日韩精品网站| 热综合一本伊人久久精品| 亚洲中文字幕久久精品无码喷水 | 亚洲精品tv久久久久久久久| 久久人妻少妇嫩草AV无码专区| 欧美亚洲另类久久综合| 久久中文字幕精品| 久久香蕉综合色一综合色88| 久久中文字幕精品| 国产成人久久久精品二区三区| 久久精品中文无码资源站| 久久国产精品99精品国产987| 一级做a爰片久久毛片毛片| 青青青青久久精品国产h| 国产成人无码精品久久久性色 | 2019久久久高清456| 一级做a爰片久久毛片免费陪| 久久久av波多野一区二区| 久久亚洲精品国产精品婷婷| 人人狠狠综合久久亚洲88| 精品久久久久久无码专区不卡| 亚洲欧洲久久久精品| 久久伊人色| 久久综合精品国产一区二区三区| 久久综合综合久久综合| 精品国产乱码久久久久久呢| 看全色黄大色大片免费久久久| 久久精品九九亚洲精品天堂| 久久99精品国产自在现线小黄鸭| 国内精品久久久久影院薰衣草| 伊人久久亚洲综合影院| 久久精品国产亚洲5555| 欧美久久综合九色综合| 色悠久久久久久久综合网| 久久一区二区三区免费| 久久久久久曰本AV免费免费| 色天使久久综合网天天| 午夜天堂精品久久久久|