• <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é)點的申明在頭文件node.h中//////////
            //////////////////////??? 掌握鏈表的必備知識點?? //////////////////////
            ////////////////////本人倉促整理 應(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é)點的指針。
            ??? int size;
            ??? int position;
            ?????? node<t> *getnode(const t& item, node<t> *ptr==null);?? //申請及釋放結(jié)點空間的函數(shù)。
            ??? node<t> freenode(node<t> *p);
            ?? public:
            ??? linkedlist(void);
            ??? ~linkedlist(void);
            ??? linkedlist<t> & operator = (const linkedlist<t> &orglist);?????? //重載賦值運算賦。
            ?????? int size<void> const;
            ?????? boolean isempty(void) const;
            ??? int nextnode(void);??????????????????????????? // 重新定位結(jié)點
            ??? int setposition(int pos);
            ??? int getposition(void)const;????????
            ??? void insertat(const t& item);????????????????? //插入結(jié)點.
            ??? void insertafter(const t& item);
            ??? void deleteat(void);?????????????????????????? //刪除結(jié)點.
            ??? 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;?????????????????????????????????? // 返回指向新生成接點的指針
            }


            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>?????????????????????????????????? //重載賦值運算符的函數(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é)點往后移了一位。
            ??????? prevptr = currptr;
            ??currptr = currptr->nextnode();
            ?}
            ?else
            ?{
            ??position = size;??????????????????????????????? //否則將此結(jié)點設(shè)置為最后結(jié)點。
            ??????? return position;
            ?}
            }


            template <class t>?????????????????????????????????? //鏈表中重置當(dāng)前結(jié)點位置的函數(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é)點處插入新結(jié)點的函數(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é)點為當(dāng)前結(jié)點
            }

            ?

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

            ?

            template <class t>????????????????????????????????? //獲取當(dāng)前結(jié)點的函數(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é)點數(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 冬天¤不回來 閱讀(1153) 評論(4)  編輯 收藏 引用

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

            <2006年10月>
            24252627282930
            1234567
            891011121314
            15161718192021
            22232425262728
            2930311234

            常用鏈接

            留言簿(3)

            隨筆檔案

            文章檔案

            Programming

            最新隨筆

            搜索

            •  

            積分與排名

            • 積分 - 39260
            • 排名 - 540

            最新評論

            閱讀排行榜

            評論排行榜

            久久国产乱子伦免费精品| 色欲综合久久躁天天躁| 精品久久久无码中文字幕天天| 久久综合九色综合网站| 狠狠综合久久AV一区二区三区| 欧美久久久久久午夜精品| 天天综合久久久网| 色综合久久综精品| segui久久国产精品| 很黄很污的网站久久mimi色| 99久久精品日本一区二区免费| 久久精品无码一区二区无码| 麻豆亚洲AV永久无码精品久久| 色婷婷综合久久久久中文| 国产精品一区二区久久国产| 久久国产成人精品麻豆| 久久综合狠狠色综合伊人| 久久久99精品成人片中文字幕 | 久久久久久免费一区二区三区| 久久99亚洲网美利坚合众国| 国产精品99精品久久免费| 国产福利电影一区二区三区久久老子无码午夜伦不| 996久久国产精品线观看| 99久久精品久久久久久清纯| 久久人人爽人人爽AV片| 中文字幕久久久久人妻| 国产精品久久久久久久| 久久久久成人精品无码| 久久久久久久久66精品片| 久久精品人成免费| 久久精品国产精品亚洲| 亚洲中文字幕无码一久久区| 人人狠狠综合久久亚洲婷婷| 亚洲国产精品嫩草影院久久| 久久精品国产精品亚洲毛片| 久久99国产一区二区三区| 国产色综合久久无码有码| 四虎国产永久免费久久| 综合久久国产九一剧情麻豆| 久久久WWW免费人成精品| 久久夜色精品国产欧美乱|