• <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 閱讀(887) 評論(2)  編輯 收藏 引用 所屬分類: 數據結構和算法

            評論

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

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

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

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

            久久久久亚洲AV成人网| 久久亚洲中文字幕精品有坂深雪| 久久久久久久久无码精品亚洲日韩 | 99久久国产免费福利| 久久精品青青草原伊人| 一本大道久久a久久精品综合| 久久国产精品免费一区| 91超碰碰碰碰久久久久久综合| 精品国产婷婷久久久| 久久国语露脸国产精品电影| 色综合久久中文色婷婷| 国内精品久久久人妻中文字幕| 亚洲国产精品无码久久一区二区| 亚洲人AV永久一区二区三区久久| 狠狠精品干练久久久无码中文字幕 | 色综合久久中文色婷婷| 久久久久久精品免费看SSS| 26uuu久久五月天| 久久99国产综合精品女同| 日本精品久久久久久久久免费| 久久精品国产72国产精福利| 亚洲va国产va天堂va久久| 国产精品成人久久久久三级午夜电影| 久久国产精品成人免费| 精品久久人人妻人人做精品| 久久99国产综合精品女同| 久久永久免费人妻精品下载| 日产精品久久久久久久| 久久99精品国产自在现线小黄鸭| 亚洲va久久久久| AV无码久久久久不卡蜜桃| 国产激情久久久久久熟女老人| 粉嫩小泬无遮挡久久久久久| 久久亚洲精品无码aⅴ大香 | 少妇内射兰兰久久| 久久天天躁狠狠躁夜夜avapp| 欧美精品一区二区久久| 久久久久亚洲AV成人网| 久久精品国产一区二区电影| 人妻少妇精品久久| 中文字幕乱码久久午夜|