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

            亚洲色大成网站WWW久久九九| 久久免费小视频| 久久受www免费人成_看片中文| 久久99精品久久久久久9蜜桃 | 国产69精品久久久久9999APGF | 国产日产久久高清欧美一区| 久久精品国产一区二区三区日韩| 免费观看成人久久网免费观看| 久久夜色撩人精品国产小说| 久久久久人妻一区精品色| 国产综合免费精品久久久| 久久久久波多野结衣高潮| 国产精品免费看久久久香蕉 | 久久亚洲AV成人无码电影| 国产精品美女久久久久av爽| 性色欲网站人妻丰满中文久久不卡| 99久久精品免费国产大片| 无码久久精品国产亚洲Av影片| 国产精品一区二区久久精品无码 | 国产精品久久国产精品99盘| 久久亚洲精品成人无码网站| 久久99精品久久久久久9蜜桃 | 久久青青草视频| 99久久精品免费观看国产| 国产精品久久影院| 久久ZYZ资源站无码中文动漫| 热RE99久久精品国产66热| 精品久久一区二区| 97久久超碰国产精品旧版| 亚洲AV乱码久久精品蜜桃| 99久久这里只精品国产免费| 久久夜色精品国产www| 久久久久亚洲AV无码去区首| 久久精品国产精品亜洲毛片| 久久线看观看精品香蕉国产| 久久99国产精品久久99| 97久久综合精品久久久综合| 69国产成人综合久久精品| 国内精品伊人久久久久| 国产精品久久影院| 久久人人爽人人澡人人高潮AV|