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

            //////////////////////下面給出鏈表LINKEDLIST 的完整申明 LINKEDLIST.H,假設結點的申明在頭文件node.h中//////////
            //////////////////////??? 掌握鏈表的必備知識點?? //////////////////////
            ////////////////////本人倉促整理 應該有不少錯誤,node.h會馬上給出//////////
            #include<iostream.h>
            #include<stdlib.h>?????????????? //exit(1) 退出函數。
            #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;??? //用于訪問數據,插入和刪除結點的指針。
            ??? int size;
            ??? int position;
            ?????? node<t> *getnode(const t& item, node<t> *ptr==null);?? //申請及釋放結點空間的函數。
            ??? 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);??????????????????????????? // 重新定位結點
            ??? int setposition(int pos);
            ??? int getposition(void)const;????????
            ??? void insertat(const t& item);????????????????? //插入結點.
            ??? void insertafter(const t& item);
            ??? void deleteat(void);?????????????????????????? //刪除結點.
            ??? void deleteafter(void);
            ??? t getdata(void) const;???????????????????????? //修改和訪問數據的函數。
            ??? 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>??????????????????????????????????? //構造函數 建立一個空鏈表。
            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>?????????????????????????????????? //重載賦值運算符的函數.
            linkedlist<t> &linkedlist<t>::operator = (const linkedlist<t> *orglist)
            {
            ?node<t> *p = orglist.front;
            ?clear();???????????????????????????????????????? //這里清空鏈表是為了給復制做好準備么?
            ?while(p)? //??????????????????????????????????? 這里想不明白,大家幫我詳細解釋下??
            ?{
            ??insertafter(p->data);
            ??p=p->nextnode();
            ?}??????? //???????????????????????????????????? ENDL;
            setposition(orglist.position);?????????????????????? //這又是什么意思?要去復習重載了。
            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++;?????????????????????????????????? //將當前結點往后移了一位。
            ??????? prevptr = currptr;
            ??currptr = currptr->nextnode();
            ?}
            ?else
            ?{
            ??position = size;??????????????????????????????? //否則將此結點設置為最后結點。
            ??????? return position;
            ?}
            }


            template <class t>?????????????????????????????????? //鏈表中重置當前結點位置的函數。
            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>?????????????????????? //重要:鏈表中在當前結點處插入新結點的函數;
            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;????????????????? //新插入的結點為當前結點
            }

            ?

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

            ?

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


            ?
            template <class t>??????????????????????????????? //鏈表中修改當前結點數據的函數
            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;??????????????? //修改空鏈表數據
            ??? size = 0;
            ?position = -1;
            }

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

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

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

            常用鏈接

            留言簿(3)

            隨筆檔案

            文章檔案

            Programming

            最新隨筆

            搜索

            •  

            積分與排名

            • 積分 - 39216
            • 排名 - 540

            最新評論

            閱讀排行榜

            評論排行榜

            精品久久久久久无码不卡| 国色天香久久久久久久小说 | 香蕉99久久国产综合精品宅男自| 久久久久亚洲av毛片大| 日韩人妻无码一区二区三区久久99 | 色狠狠久久AV五月综合| 国产成人精品久久二区二区| 色天使久久综合网天天| 欧美丰满熟妇BBB久久久| 99久久99久久精品国产片果冻| 亚洲欧美成人综合久久久| 久久久久噜噜噜亚洲熟女综合| 少妇久久久久久久久久| 99久久综合国产精品二区| 69SEX久久精品国产麻豆| 欧美成a人片免费看久久| 国内精品久久久久| 久久国产精品无码HDAV| 久久久老熟女一区二区三区| 久久综合给合综合久久| 伊人久久大香线蕉影院95| 国产精品久久久久免费a∨| 国产福利电影一区二区三区久久久久成人精品综合| 欧美激情精品久久久久久久九九九| 久久久久亚洲Av无码专| 国产精品久久久久久久app | 伊人色综合久久天天网| 一本一道久久a久久精品综合| 狠狠色丁香婷婷久久综合不卡| 欧美亚洲国产精品久久高清| 久久精品这里只有精99品| 久久精品国产网红主播| 久久久久久久亚洲Av无码| 久久精品中文字幕大胸| 亚洲精品无码久久千人斩| 一本综合久久国产二区| 日韩久久无码免费毛片软件| 精品久久久久久无码中文野结衣 | 久久久无码精品亚洲日韩蜜臀浪潮 | 精品久久久久久亚洲精品| 久久精品国产亚洲一区二区|