• <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>
            冬天¤不回來
            海風(fēng)輕輕吹過我的臉龐 陽光溫柔的灑在我身上 海鷗自由的飛在天空中像 快樂的徘徊在游樂場 白云在偷看彩虹的模樣 海洋總為那船長指方向 海浪撫摸著沙灘的衣裳 我也每天都為他換上新裝 找到方向 揭開迷茫 學(xué)著堅強(qiáng) 努力去闖!
            posts - 20,  comments - 90,  trackbacks - 0

            //////////////////////下面給出鏈表LINKEDLIST 的完整申明 LINKEDLIST.H,假設(shè)結(jié)點(diǎn)的申明在頭文件node.h中//////////
            //////////////////////??? 掌握鏈表的必備知識點(diǎn)?? //////////////////////
            ////////////////////本人倉促整理 應(yīng)該有不少錯誤,node.h會馬上給出//////////
            #include<iostream.h>
            #include<stdlib.h>?????????????? //exit(1) 退出函數(shù)。
            #include"node.h"
            template<class t>
            enum boolean{false,true}???????? //將FALSE 和 TRUE 固定為0和1。
            class linkedlist
            {
            ?? private:
            ??? node<t> *front,*rear;??????? //指向表頭和表尾的指針。
            ??? node<t> *prevptr,*currtr;??? //用于訪問數(shù)據(jù),插入和刪除結(jié)點(diǎn)的指針。
            ??? int size;
            ??? int position;
            ?????? node<t> *getnode(const t& item, node<t> *ptr==null);?? //申請及釋放結(jié)點(diǎn)空間的函數(shù)。
            ??? node<t> freenode(node<t> *p);
            ?? public:
            ??? linkedlist(void);
            ??? ~linkedlist(void);
            ??? linkedlist<t> & operator = (const linkedlist<t> &orglist);?????? //重載賦值運(yùn)算賦。
            ?????? int size<void> const;
            ?????? boolean isempty(void) const;
            ??? int nextnode(void);??????????????????????????? // 重新定位結(jié)點(diǎn)
            ??? int setposition(int pos);
            ??? int getposition(void)const;????????
            ??? void insertat(const t& item);????????????????? //插入結(jié)點(diǎn).
            ??? void insertafter(const t& item);
            ??? void deleteat(void);?????????????????????????? //刪除結(jié)點(diǎn).
            ??? void deleteafter(void);
            ??? t getdata(void) const;???????????????????????? //修改和訪問數(shù)據(jù)的函數(shù)。
            ??? void setdata(const t& item);
            ?????? void clear(void);
            };


            template <class t>
            node<t> *linkedlist<t>::getnode(const t&item ,node<t> *ptr);
            {
            ?node<t> *newnode = new node<t>(item ptr);
            ?if(!newnode)
            ?{
            ??cerr<<"faied"<<e<endl;
            ??return null'
            ?}
            ?return newnode;?????????????????????????????????? // 返回指向新生成接點(diǎn)的指針
            }


            template <class t>
            void *linkedlist<t>::freenode(node<t> *ptr)
            {
            ?if(!ptr)
            ?{
            ??cerr<<"invalid node pointer!"<<endl;
            ??return 0;
            ?}
            ?delete ptr;
            }


            template <class t>??????????????????????????????????? //構(gòu)造函數(shù) 建立一個空鏈表。
            linkedlist<t>::linkedlist<void>:front(null),rear(null),prevter(null),currptr(null),size(0),position(-1)
            {}

            template <class t>
            linkedlist::~linkedlist()
            {
            ?clear();
            }


            template <class t>?????????????????????????????????? //重載賦值運(yùn)算符的函數(shù).
            linkedlist<t> &linkedlist<t>::operator = (const linkedlist<t> *orglist)
            {
            ?node<t> *p = orglist.front;
            ?clear();???????????????????????????????????????? //這里清空鏈表是為了給復(fù)制做好準(zhǔn)備么?
            ?while(p)? //??????????????????????????????????? 這里想不明白,大家?guī)臀以敿?xì)解釋下??
            ?{
            ??insertafter(p->data);
            ??p=p->nextnode();
            ?}??????? //???????????????????????????????????? ENDL;
            setposition(orglist.position);?????????????????????? //這又是什么意思?要去復(fù)習(xí)重載了。
            return *this;???????????????????????????????????????


            template <class t>
            int linkedlist<t>::size(void) const
            {
            ?return size;
            }


            template <class t>
            boolean linkedlist<t>::isempty(void) const
            {
            ?return size?false:ture;
            }


            template <class t>
            int linkedlist<t>::nextnode(void)
            {
            ?if(position>=0 && position<size)
            ?{
            ??position++;?????????????????????????????????? //將當(dāng)前結(jié)點(diǎn)往后移了一位。
            ??????? prevptr = currptr;
            ??currptr = currptr->nextnode();
            ?}
            ?else
            ?{
            ??position = size;??????????????????????????????? //否則將此結(jié)點(diǎn)設(shè)置為最后結(jié)點(diǎn)。
            ??????? return position;
            ?}
            }


            template <class t>?????????????????????????????????? //鏈表中重置當(dāng)前結(jié)點(diǎn)位置的函數(shù)。
            int linkedlist<t>::setpostion(int pos)
            {
            ?if(!size)
            ??return -1;
            ?if(pos<0||pos>size-1)
            ?{
            ??cerr<<"error position"<<endl;
            ??return -1;
            ?}
            ?prevptr = null;
            ?currptr = front;
            ?position = 0;
            ?for(int k=0;k<pos;k++)
            ?{
            ??position++;
            ??prevptr = currptr;
            ??currptr = currptr->nextnode();
            ?}
            ?return position;
            }


            template <class t>
            int linkedlist::getposition(void)const
            {
            ?return position;
            }

            ?

            template <class t>?????????????????????? //重要:鏈表中在當(dāng)前結(jié)點(diǎn)處插入新結(jié)點(diǎn)的函數(shù);
            void linkedlist<t>::insertat(const t& item)
            {
            ?node<t> *newnode;
            ?if(!size)??????????????????????????? //空表中插入。
            ?{
            ??newnode = getnode(item, front);
            ??front = rear = newnode;
            ??position = 0;
            ?}
            ?else if(!prevptr)?????????????????? //在表頭插入?????????????????
            ?{
            ??newnode = getnode(item , front);
            ??????? front = newnode;
            ?}
            ?else??????????????????????????????? //在鏈表中間插入插入
            ?{?
            ??newnode = getnode(item , front);
            ??prevptr = insertafter(newnode);
            ?}
            ?size++;
            ?currptr = newnode;????????????????? //新插入的結(jié)點(diǎn)為當(dāng)前結(jié)點(diǎn)
            }

            ?

            template <class t>?????????????????????? //重要:鏈表中在當(dāng)前結(jié)點(diǎn)后插入新結(jié)點(diǎn)的函數(shù);
            void linkedlist<t>::insertafter(const t& item)
            {
            ?node<t> *newnode;
            ?if(!size)??????????????????????????? //空表中插入。
            ?{
            ??newnode = getnode(item);
            ??front = rear = newnode;
            ??position = 0;
            ?}
            ?else if(currptr == rear||!currptr)?? //在鏈表尾插入
            ?{
            ??newnode = getnode(item);
            ??rear->insertafter(newnode);
            ??prevptr=newnode;
            ??rear = newnode;
            ??position = size;
            ?}
            ?else
            ?{
            ??newnode = getnode(item ,currptr->nextnode());??? //? 在表的中間插入
            ??currptr->insertafter(newnode);
            ??prevptr = currptr;
            ??position++
            ?}
            ??size++;
            ??currptr = newnode;
            }


            template <class t>
            void linkedlist<t>::deleteat(void)????????????????? //重要:刪除當(dāng)前結(jié)點(diǎn)的函數(shù)
            {
            ?node<t> *oldnode;
            ?if(!currptr)???????????????????????????????????? //若表為空或者已到表尾,則給出錯誤提示并返回
            ?{
            ??cerr<<"currptr position is invalid!"<<endl;
            ??return;
            ?}
            ?if(!prevtr)?????????????????????????????????????? //刪除表頭結(jié)點(diǎn)。
            ?{
            ??oldnode = front;
            ??front = currptr->nextnode();
            ?}
            ?else
            ?{
            ??oldnode = prevptr->deleteafter();??????????? //刪除的是表中結(jié)點(diǎn);
            ?}
            ?if(oldnode == rear)
            ?{
            ??rear = prevptr;????????????????????????????? //刪除的是表尾結(jié)點(diǎn),則修改表尾指針和當(dāng)前位置結(jié)點(diǎn)值
            ??position--;
            ?}
            ?currptr = oldnode->nextnode();????????????????? //后續(xù)結(jié)點(diǎn)作為新的當(dāng)前結(jié)點(diǎn)
            ?freenode(oldnode);????????????????????????????? //釋放原當(dāng)前結(jié)點(diǎn)
            ?size--;???????????????????????????????????????? //鏈表大小減1;
            }

            ?

            template <class t>
            void linkedlist<t>::deleteafter(void)
            {
            ?node<t> *oldnode;
            ?if(!currptr||currptr==rear)
            ?{
            ??cerr<<"current position is invalid!"<<endl;
            ??return;
            ?}
            ?oldnode = currptr->deleteafter();??????????????? //保存被刪除結(jié)點(diǎn)的指針并從鏈表中刪除該結(jié)點(diǎn)。
            ?if(oldnode == rear)
            ?{
            ??rear == currptr;????????????????????????????? //刪除的是表尾結(jié)點(diǎn)。
            ?}
            ?freenode(oldnode);
            ?size--;
            }

            ?

            template <class t>????????????????????????????????? //獲取當(dāng)前結(jié)點(diǎn)的函數(shù)
            T linkedlist<t>::getdata(void) const
            {
            ?if(!size || !currptr)????????????????????????????? //若表為空或已經(jīng)到達(dá)表尾之后,則出錯。
            ?{
            ??cerr<<"currptr node not exit!"<<endl;?????????? //給出錯誤信息并退出。
            ??exit(1);
            ?}
            ?return currptr->data;
            }


            ?
            template <class t>??????????????????????????????? //鏈表中修改當(dāng)前結(jié)點(diǎn)數(shù)據(jù)的函數(shù)
            void linkedlist<t>::setdata(const T& item)
            {
            ?if(!size||!currptr)
            ?{
            ??cerr<<"data:current node not exit!"<<endl;
            ??exit(1);
            ?}
            ?currptr->data = item;
            }


            template <class t>
            void linkedlist<t>::clear(void)
            {
            ?node<t> *currptr=front,*nextnode;
            ?while(currnode)
            ?{
            ??nextnode = currnode->nextnode();
            ??freenode(currnode);
            ??currnode = nextnode;
            ?}
            ?front = rear = prevptr = currptr = null;??????????????? //修改空鏈表數(shù)據(jù)
            ??? size = 0;
            ?position = -1;
            }

            posted on 2006-09-25 22:47 冬天¤不回來 閱讀(1151) 評論(4)  編輯 收藏 引用

            FeedBack:
            # re: ///// 掌握鏈表的必備知識點(diǎn) //////
            2006-09-25 23:34 | warrior
            我只有這個水平!請高手指點(diǎn)撒  回復(fù)  更多評論
              
            # re: ///// 掌握鏈表的必備知識點(diǎn) //////
            2006-10-07 16:25 | 冬天¤不回來
            主要是一些基本的插入 刪除 運(yùn)算  回復(fù)  更多評論
              
            # re: ///// 掌握鏈表的必備知識點(diǎn) //////
            2006-10-24 23:43 | Asp
            華為的一道筆試題:
            只遍歷一次鏈表,找到倒數(shù)第n個節(jié)點(diǎn)……
            嘿嘿…… 可以想想…… 結(jié)果很容易……  回復(fù)  更多評論
              
            # re: ///// 掌握鏈表的必備知識點(diǎn) //////
            2007-03-26 14:45 | zkkpkk
            判斷兩鏈表是否相交,時間復(fù)雜度控制在O(n),據(jù)說是M$的試題  回復(fù)  更多評論
              

            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            QQ:41696402

            <2006年9月>
            272829303112
            3456789
            10111213141516
            17181920212223
            24252627282930
            1234567

            常用鏈接

            留言簿(3)

            隨筆檔案

            文章檔案

            Programming

            最新隨筆

            搜索

            •  

            積分與排名

            • 積分 - 39204
            • 排名 - 541

            最新評論

            閱讀排行榜

            評論排行榜

            97热久久免费频精品99| 色综合久久久久网| 亚洲日韩中文无码久久| 久久久久中文字幕| 久久伊人色| 99久久免费只有精品国产| 久久国产欧美日韩精品 | 无码国产69精品久久久久网站| 93精91精品国产综合久久香蕉| 久久精品中文字幕一区| 久久www免费人成看国产片 | 久久免费的精品国产V∧| 久久亚洲高清观看| 伊人久久大香线焦AV综合影院| 99久久精品国产一区二区| 久久香综合精品久久伊人| 午夜人妻久久久久久久久| 国产精品一区二区久久精品无码| 99热都是精品久久久久久| 亚洲中文字幕久久精品无码APP| 国产成人精品久久| 久久国产精品77777| 天天爽天天狠久久久综合麻豆| 久久久久久无码国产精品中文字幕| 久久精品国产清高在天天线| 尹人香蕉久久99天天拍| 久久久无码精品亚洲日韩蜜臀浪潮| 久久久亚洲精品蜜桃臀| 久久国产午夜精品一区二区三区| 久久久久久久99精品免费观看| 亚洲AV日韩精品久久久久| 99久久国产亚洲综合精品| 久久香蕉国产线看观看精品yw| 国产精品久久久久久久人人看 | 人妻无码精品久久亚瑟影视| 国产农村妇女毛片精品久久| 国产精品成人99久久久久| 色成年激情久久综合| 国产午夜电影久久| 久久香蕉国产线看观看精品yw | 久久成人小视频|