線性表 單鏈表 C

2021-07-13 04:09:42 字數 3188 閱讀 8370

單鏈表演示圖:

單鏈表結構體:

struct node

datatype _data;        //資料  

struct node *_next;    //指向下乙個節點的指標

};

帶頭結點和尾節點的單鏈表:

多乙個tail指標的好處就是很方便可以找到鍊錶尾部,方便在尾部插入乙個元素什麼的。

下面我們用類來實現單鏈表:

class slist

slist(const slist& s)             //拷貝構造

:_head(null)

, _tail(null)

_tail = cur;

} ~slist()                           //析構函式

_tail = null;

_head = null;

} slist& operator=(slist s)           //賦值運算子過載

單鏈表最基本的四個函式:

void slist::pushback(const datatype& d)   //尾插

else }

void slist::pushfront(const datatype& d)   //頭插

else }

void slist::popback()                     //尾刪

else

delete _tail;

_tail = cur;

_tail->_next = null; }}

void slist::popfront()                  //頭刪

else

}

給乙個資料,若找到該節點則返回該節點,沒找到則返回null

node* slist::find(const datatype& d)

return null;

}

給定乙個節點,在該節點後插入乙個新的節點

void slist::insert(node* pos, const datatype& d)

else

}

鍊錶的逆序:此處用三個指標來實現

void slist::reverse()

_head = newhead;

}

鍊錶的排序:採用氣泡排序

void slist::sort()

cur = cur->_next;

}   end = cur;

cur = _head;

}}

刪除某個節點(給定乙個資料,刪除資料與之相等的第乙個節點)

void slist::remove(const datatype& d)

cur = cur->_next;

}}

刪除某些節點(給定乙個資料,刪除資料與之相等的每乙個節點)

void slist::removeall(const datatype& d)

cur = cur->_next;

} return;

}

刪除非尾節點

void slist::earsenottail(node *pos)

cur->_next = pos->_next;     //讓它的_next指向要刪除節點的_next

delete del;

}

找到中間節點

node*  slist::findminnode()                //快慢指標問題

return slow;

}

刪除倒數第k個節點

void  slist::delknode(int k)

node *p1 = _head;            

node *tmp = null;

while (cur->_next )          //讓乙個指向頭結點的指標和cur一起走

node *del = p1;

tmp->_next = p1->_next ;

delete p1;

}

檢測是否帶環

//檢測是否帶環

int  slist::checkcycle(const slist& s)      //快慢指標問題

fast = fast->_next->_next;

slow = slow->_next;

} return 0;

}

獲取環的入口點

node*  slist::getcycleeorynode()

cur = cur->_next;

} return null;

}

判斷是否相交

int  slist::checkcross(slist& l1, slist& l2)

} else }

return 0;

}

合併兩個鍊錶

int  slist::checkcross(slist& l1, slist& l2)

} else }

return 0;

}

求兩個鍊錶的交點

node*  slist::getlinkcross(slist& l1, slist& l2)

} }else

}} return null;

}

求鍊錶長度

int slist::lengthoflist(const slist& s)

以後會有改進版奉上,希望大家多多支援

線性表 單鏈表

define crt secure no deprecate define crt secure cpp overload standard names 1 includeusing namespace std typedef struct node node node headpointer 頭指...

線性表 單鏈表

單鏈表結構與順序儲存結構對比 一 儲存分配方式 1 順序儲存結構用一段連續的儲存單元依次儲存線性表的資料元素 2 單鏈表採用鏈式儲存結構,用一組任意的儲存單元存放線性表的元素 二 時間效能 1 查詢 順序儲存結構o 1 單鏈表o n 2 插入和刪除 順序儲存結構o n 單鏈表找到位置後插入刪除時間o...

線性表 單鏈表

template struct node template class linklist 無參建構函式,建立只有頭結點的空鍊錶 linklist t a int n 有參建構函式,建立有n個元素的單鏈表 linklist 析構函式 int length 求單鏈表的長度 t get int i 按位查...