-
數(shù)組前移,for循環(huán)從小到大賦值
for(int k=i+1;k<m_length;k++)
{
????m_plist[k-1]=m_plist[k];
}
查看全部 -
數(shù)組后移操作 倒序循環(huán)賦值
for(int k=m_length-1;k>=i;k--)
{????
}
查看全部 -
用坐標輸出查看全部
-
length是數(shù)據(jù)成員個數(shù)查看全部
-
線性表刪除查看全部
-
結(jié)點要從堆中申請內(nèi)存,不能從棧中申請查看全部
-
數(shù)據(jù)結(jié)構(gòu)—鏈表查看全部
-
數(shù)據(jù)結(jié)構(gòu)—順序表查看全部
-
明天繼續(xù)查看全部
-
鏈表的清空函數(shù) ClearList() 的解釋:
將頭結(jié)點m_pList后的所有節(jié)點刪除,并將頭結(jié)點m_pList的對象指針next指針置為NULL。
void?list::ClearList() { ????Node?*currentNode?=?m_pList->next; ????while(currentNode?!=?NULL) ????{ ?????Node?*temp?=?currentNode->next; ?????delete?currentNode; ?????currentNode?=?temp; ????} ????m_pList->next?=?NULL; }
m_pList并沒有被刪除,其數(shù)據(jù)仍然為零( m_pList->data = 0 ),只是將其的next指針置為NULL( m_pList->next = NULL )。
另外,此處?while(currentNode != NULL) 只是判斷節(jié)點是否為空,并不是判斷節(jié)點的對象指針。
原因是:
m_pList?是一個Node類型的對象指針,則其包含兩個數(shù)據(jù)成員,一個是(i nt data ),另外一個是( Node *next )。
其數(shù)據(jù)成員*next同時也是一個Node類型的對象,可以指向下一個節(jié)點(通過 Node *currentNode = m_pList->next? 來將其下一個節(jié)點賦值給 currentNode?)。
m_pList?只作為頭結(jié)點,其數(shù)據(jù)成員(?m_pList->data?)不放元素,沒有任何意義;其對象指針成員(?m_pList->next?) 只放鏈表第一個結(jié)點的地址。
m_pList?雖然是一個頭結(jié)點,但不算在鏈表中,此時 m_iLength = 0。【由3-3 鏈表編碼實戰(zhàn)(一)3:55處可知】
查看全部 -
前驅(qū):指定元素的前一個元素
后繼:指定元素的后一個元素
查看全部 -
線性表:
1 順序表(數(shù)組):訪問速度快、搜索能力強
2 鏈表:靜態(tài)鏈表、單鏈表、循環(huán)鏈表、雙向鏈表
查看全部 -
線性表:n個數(shù)據(jù)元素的 有限 序列
查看全部 -
/** ?*?單鏈表 ?*/ public?class?LinkedList?{ ????private?Node?first;//頭結(jié)點 ????private?int?length;//鏈表長度 ????public?LinkedList()?{ ????????first?=?new?Node(-1,?null); ????????length?=?0; ????} ????private?static?class?Node?{ ????????int?data;?//數(shù)據(jù)域 ????????Node?next;?//指針域 ????????Node(int?data,?Node?next)?{ ????????????this.data?=?data; ????????????this.next?=?next; ????????} ????????void?showNode()?{ ????????????System.out.println(this.data?+?""); ????????} ????} ????public?boolean?isEmpty()?{ ????????return?length?==?0; ????} ????public?int?getLength()?{ ????????return?length; ????} ????//清空鏈表 ????public?void?clearList()?{ ????????Node?next?=?first.next; ????????while?(next?!=?null)?{ ????????????Node?temp?=?next.next; ????????????next.next?=?null; ????????????next?=?temp; ????????} ????????first.next?=?null; ????????length?=?0; ????} ????//在頭結(jié)點后邊插入 ????public?void?insertHead(int?elem)?{ ????????Node?next?=?first.next; ????????first.next?=?new?Node(elem,?next); ????????length++; ????} ????//在尾結(jié)點后插入 ????public?void?insertTail(int?elem)?{ ????????//尋找尾節(jié)點 ????????Node?curNode?=?first; ????????while?(curNode.next?!=?null)?{ ????????????curNode?=?curNode.next; ????????} ????????curNode.next?=?new?Node(elem,?null); ????????length++; ????} ????/** ?????*?在index位置插入 ?????* ?????*?@param?index ?????*?@param?elem ?????*/ ????public?void?insert(int?index,?int?elem)?{ ????????if?(index?<?0?||?index?>?length)?{ ????????????throw?new?IndexOutOfBoundsException("index?不是鏈表的正確位置"); ????????} ????????Node?curNode?=?first; ????????//找到插入位置index的前一個位置 ????????for?(int?i?=?0;?i?<?index;?i++)?{ ????????????curNode?=?curNode.next; ????????} ????????Node?temp?=?curNode.next; ????????curNode.next?=?new?Node(elem,?temp); ????????length++; ????} ????/** ?????*?刪除index位置的元素 ?????* ?????*?@param?index ?????*?@return ?????*/ ????public?int?delete(int?index)?{ ????????if?(index?<?0?||?index?>=?length)?{ ????????????throw?new?IndexOutOfBoundsException("index?不是鏈表的正確位置"); ????????} ????????Node?curNode?=?first; ????????//找到刪除位置index的前一個位置的結(jié)點 ????????for?(int?i?=?0;?i?<?index;?i++)?{ ????????????curNode?=?curNode.next; ????????} ????????Node?rmNode?=?curNode.next; ????????curNode.next?=?rmNode.next; ????????rmNode.next?=?null; ????????length--; ????????return?rmNode.data; ????} ????public?int?getElem(int?index)?{ ????????if?(index?<?0?||?index?>=?length)?{ ????????????throw?new?IndexOutOfBoundsException("index?不是鏈表的正確位置"); ????????} ????????Node?curNode?=?first; ????????//find ????????for?(int?i?=?0;?i?<=?index;?i++)?{ ????????????curNode?=?curNode.next; ????????} ????????return?curNode.data; ????} ????public?int?locateElem(int?elem)?{ ????????Node?curNode?=?first; ????????for?(int?i?=?0;?i?<?length;?i++)?{ ????????????if?(curNode.next.data?==?elem){ ????????????????return?i; ????????????} ????????????curNode?=?curNode.next; ????????} ????????return?-1; ????} ????//尋找一個元素的前驅(qū) ????public?int?getPriorElem(int?elem){ ????????Node?curNode?=?first; ????????Node?tempNode; ????????while?(curNode.next?!=?null){ ????????????tempNode?=?curNode; ????????????curNode?=?curNode.next; ????????????if?(tempNode?!=?first?&&?curNode.data?==?elem){ ????????????????return?tempNode.data; ????????????} ????????} ????????return?-1; ????} ????//尋找一個元素的后繼 ????public?int?getNextElem(int?elem){ ????????Node?curNode?=?first; ????????while?(curNode.next?!=?null){ ????????????curNode?=?curNode.next; ????????????if?(curNode.data?==?elem?&&?curNode.next?!=?null){ ????????????????return?curNode.next.data; ????????????} ????????} ????????return?-1; ????} ????public?void?listTraverse()?{ ????????Node?node?=?first; ????????for?(int?i?=?0;?i?<?length;?i++)?{ ????????????node.next.showNode(); ????????????node?=?node.next; ????????} ????} }
查看全部 -
單鏈表的構(gòu)成
查看全部
舉報