亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        非固定類型數(shù)據(jù)結(jié)點(diǎn)鏈表的一種實(shí)現(xiàn)方法

        2017-05-23 22:20:43王若
        中文信息 2017年4期
        關(guān)鍵詞:鏈表聯(lián)合體結(jié)點(diǎn)

        摘 要:鏈表是用一組任意的存儲單元來存放線性表中的結(jié)點(diǎn),這組存儲單元可以不連續(xù)地分布在內(nèi)存中任何的位置上。鏈表存儲數(shù)據(jù),對于結(jié)點(diǎn)的數(shù)據(jù)域來說,一旦確定了結(jié)點(diǎn)類型之后,數(shù)據(jù)域的數(shù)據(jù)類型就確定了,這導(dǎo)致了鏈表的不通用性。也就是說一條鏈表上只能存儲一種或者幾種已經(jīng)確定的數(shù)據(jù)類型的數(shù)據(jù)。但是要想在此條鏈表上存儲另外一種或者幾種數(shù)據(jù)類型的數(shù)據(jù)就不能適用了。因此,我就解決此類問題,使得后一個結(jié)點(diǎn)的數(shù)據(jù)類型不受前一個結(jié)點(diǎn)數(shù)據(jù)類型的影響。這種方法不是單純的一種數(shù)據(jù)類型而是一種聯(lián)合體,它里面有很多種的數(shù)據(jù)類型,當(dāng)一種數(shù)據(jù)類型輸入時,它就會自動匹配該數(shù)據(jù)的類型,并且可以最小化的節(jié)省空間。

        關(guān)鍵詞:鏈表 數(shù)據(jù)域 指針域 結(jié)點(diǎn) 聯(lián)合體 結(jié)構(gòu)體 回調(diào)函數(shù)

        中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A 文章編號:1003-9082 (2017) 04-0003-01

        //結(jié)點(diǎn)中數(shù)據(jù)域部分用聯(lián)合體代替

        typedef union data_

        {

        double d;

        float f;

        int i;

        char c;

        }Data;

        //鏈表的結(jié)點(diǎn)類型

        typedef struct Clist_node

        {

        Data *data;//數(shù)據(jù)

        struct Clist_node *next;//指向下一個結(jié)點(diǎn)的指針

        }Clist_node;

        typedef struct Clist

        {

        int size;//鏈表結(jié)點(diǎn)的大小

        Clist_node *head;//頭結(jié)點(diǎn),一般沒有有效數(shù)據(jù)(data)

        int (*insert)(struct Clist *,size_t pos,void* data,size_t size); int (*modify_pos_data)(struct Clist*,int pos,void * new_data,size_t size);

        int (*del_pos)(struct Clist *,int pos);

        int(*search_node_pos)(struct Clist*,int pos,\

        void (*print)(Clist_node *));

        int (*is_empty)(struct Clist *);

        }Clist;

        程序分析:

        在申明結(jié)點(diǎn)類型的時候,它的數(shù)據(jù)域是一個指向堆空間的指針,指針域就是一個指向下個結(jié)點(diǎn)類型的指針。

        我們在鏈表初始化的時候,就可以把鏈表內(nèi)部的行為和(lish.c)中實(shí)際的行為處理函數(shù)相對應(yīng),但是一般來說把初始化函數(shù)和銷毀函數(shù)都不放在鏈表內(nèi)部作為行為。

        Clist_insert//此函數(shù)是用于插入結(jié)點(diǎn),pos是需要插入的位置,而data是指向一個需要插入數(shù)據(jù)域的指針變量,該指針?biāo)邮盏牡刂肥亲鳛槠鹗嫉刂返牟⑶乙詾閟ize大小的字節(jié)的數(shù)據(jù)。為了適應(yīng)更多的類型的數(shù)據(jù)以及通用性,結(jié)點(diǎn)的數(shù)據(jù)域是一個聯(lián)合體類型的指針,然后開辟size個字節(jié)大小的堆空間。當(dāng)每次傳進(jìn)來的size不同也就是代表著以data指向的地址作為起始地址,開始往后取size個字節(jié)大小的數(shù)據(jù),然后分類存儲在聯(lián)合體中的不同類型的基本類型變量中。

        Clist_modify_pos_data//把pos位置上的數(shù)據(jù)修改為new_data。修改數(shù)據(jù)的時候,是根據(jù)結(jié)點(diǎn)位置來做修改,把原來數(shù)據(jù)域聯(lián)合體指針指向的堆空間內(nèi)存里存儲的數(shù)據(jù)修改為以new_data指針指向的大小為size字節(jié)的數(shù)據(jù)。

        Clist_del_pos//刪除pos位置的結(jié)點(diǎn)

        刪除操作是是根據(jù)結(jié)點(diǎn)的位置來刪除,我們根據(jù)提供的pos大小和鏈表的大小list->size做比較,不斷遍歷每個結(jié)點(diǎn),當(dāng)?shù)降趐os結(jié)點(diǎn)時,注意,我在插入次結(jié)點(diǎn)的時候開辟了兩段堆內(nèi)存,一段是給數(shù)據(jù)域,另外一段是結(jié)點(diǎn)本身,所以在刪除的時候,要先釋放數(shù)據(jù)域指向的堆空間,再釋放結(jié)點(diǎn)空間。若順序操作反了,則會使數(shù)據(jù)域的指向的內(nèi)存空間找不到,造成內(nèi)存泄露。

        Clist_search_node_pos//查詢鏈表上的pos位置結(jié)點(diǎn),把數(shù)據(jù)利用回調(diào)函數(shù)顯示出來。

        查詢操作是根據(jù)結(jié)點(diǎn)的位置來查詢的,當(dāng)查找到第pos個結(jié)點(diǎn)時候,把結(jié)點(diǎn)傳遞給print()函數(shù),該函數(shù)作為回調(diào),把用戶在test.c申明的函數(shù)傳進(jìn)來。在test.c中的實(shí)現(xiàn)的打印函數(shù)是根據(jù)數(shù)據(jù)域的指針指向的數(shù)據(jù)類型分開處理的。

        總結(jié)

        起初在設(shè)計的時候就是單層的考慮需要在鏈表中插入一直已知的數(shù)據(jù)類型,比如說是int或者是double等,但是這不滿足通用性,如果說我第一次使用該鏈表插入的數(shù)據(jù)類型是int類型,但是第二次我需要插入double,那么由于數(shù)據(jù)類型的不匹配將導(dǎo)致數(shù)據(jù)被截斷或者不合法。為了解決這個問題,我用void *data類型來接收需要插入數(shù)據(jù)的地址,然后直接將data指針賦值給結(jié)點(diǎn)的數(shù)據(jù)域,這會導(dǎo)致一個問題,就是如果說傳進(jìn)來的地址不變,但是地址對應(yīng)的數(shù)據(jù)是在變化的,最終使得所有的結(jié)點(diǎn)中的數(shù)據(jù)類型全部是一樣,因?yàn)樗鼈兌际侵赶蛞粔K內(nèi)存區(qū)域,從而達(dá)不到原本的目的。所以我最終使用結(jié)點(diǎn)中數(shù)據(jù)域用一個指針指向一塊堆內(nèi)存,在堆內(nèi)存中用一個聯(lián)合體類型的變量來保存,聯(lián)合體可以實(shí)現(xiàn)數(shù)據(jù)共享,并且盡量占用更少的內(nèi)存這一很好的特點(diǎn)。

        參考文獻(xiàn)

        [1](美)勞頓(Loudom.K.)著;肖翔陳舸譯.算法精解:C語言描述[R]北京:機(jī)械工業(yè)出版社,2012,8

        [2](美)霍爾頓(Horton,I.)著;楊浩譯.C語言入門經(jīng)典(第五版)北京:清華大學(xué)出版社.2013

        [3]陸玲,周航慈著;嵌入式操作系統(tǒng)軟件設(shè)計中的數(shù)據(jù)結(jié)構(gòu)北京:北京航空航天大學(xué)出版社,2008,8

        作者簡介:王若,男,漢族,安徽省淮南市壽縣,工作單位:安徽師范大學(xué),在校學(xué)生

        猜你喜歡
        鏈表聯(lián)合體結(jié)點(diǎn)
        對于聯(lián)合體EPC總承包模式下成本控制的得與失
        基于二進(jìn)制鏈表的粗糙集屬性約簡
        跟麥咭學(xué)編程
        基于鏈表多分支路徑樹的云存儲數(shù)據(jù)完整性驗(yàn)證機(jī)制
        Ladyzhenskaya流體力學(xué)方程組的確定模與確定結(jié)點(diǎn)個數(shù)估計
        創(chuàng)新思維——打造智庫聯(lián)合體
        鏈表方式集中器抄表的設(shè)計
        電測與儀表(2014年1期)2014-04-04 12:00:22
        歸脾湯加減聯(lián)合體針治療心脾兩虛型失眠48例
        基于Raspberry PI為結(jié)點(diǎn)的天氣云測量網(wǎng)絡(luò)實(shí)現(xiàn)
        工程聯(lián)合體小議
        人妻系列影片无码专区| 国产一区二区女内射| 欧美巨大性爽| 国产成年无码久久久免费| 亚洲偷自拍国综合第一页国模| 国产成人av一区二区三区不卡| 亚洲成a v人片在线观看| 午夜短视频日韩免费| 国产精品人成在线765| 日本国产亚洲一区二区| 日本高清视频www| 成人无码h真人在线网站| 激情乱码一区二区三区| 少妇精品亚洲一区二区成人 | 国产亚洲av综合人人澡精品| 国产欧美另类精品久久久| 色噜噜色哟哟一区二区三区| 在线精品亚洲一区二区动态图| 国产美女露脸口爆吞精| www.91久久| 少妇被粗大的猛进69视频| 伊人久久大香线蕉av色| 国产98在线 | 免费| 日本二区视频在线观看| 玖玖色玖玖草玖玖爱在线精品视频 | 未满十八勿入av网免费| 久久精品亚洲成在人线av| 成人无码一区二区三区| 爱情岛论坛亚洲品质自拍hd| 国产不卡视频一区二区在线观看 | 91久久精品色伊人6882| 国产情侣久久久久aⅴ免费| 成人无码无遮挡很H在线播放| 白白色发布在线观看视频| 精品国内在视频线2019| 日韩精品电影在线观看| 日韩精品免费观看在线| 国产成人av在线免播放观看新| 无码人妻丰满熟妇精品区| 亚洲在线视频一区二区| 精品人妻久久av中文字幕|