關於單鏈表的演算法題

2021-12-29 20:45:55 字數 2568 閱讀 8992

//1.順序表和煉表的優缺點。

//順序表的優點是可以隨機訪問資料元素;缺點是大小固定,不利於增刪結點。

//鍊錶的優點是採用指標方式增減結點,非常方便(只需要改變指標指向,不移動結點);

//缺點是不能進行隨機訪問,另外,每個結點上增加指標域,造成額外儲存空間增大。

#include

#include

#include

#include

#include

typedef int datatype;

typedef struct linknode

linknode,*plinknode;

plinknode buynode(datatype x);//開闢節點

void initnode(plinknode& phead);//初始化

void destorynode(plinknode& phead);//銷毀節點

void pushback(plinknode& phead,datatype x);//尾插節點

void printnode(plinknode phead);//列印

void printffromtail(plinknode phead);//從尾到頭列印鍊錶

void erasenohead(plinknode pos);//刪除乙個無頭單鏈表的非尾節點

void insertnohead(plinknode pos, datatype x);//無頭單鏈表非頭節點插入乙個節點

void joseph(plinknode phead,int length);//實現約瑟夫環

void reverse(plinknode& phead);//逆置/反轉單鏈表

void combinetwolink(plinknode& firstphead, plinknode secondphead);

void searchmid(plinknode phead);//查詢單鏈表的中間節點,只能遍歷一次

plinknode searchknode(plinknode phead,int k);//查詢單鏈表的倒數第k個節點,只遍歷一次

plinknode buynode(datatype x)

void initnode(plinknode& phead)

void destorynode(plinknode& phead)

}plinknode find(plinknode plinkhead, datatype x)

return null;

}void pushback(plinknode& phead, datatype x)

else

cur->_next = newnode;

}}void printnode(plinknode phead)

printf("null\n");

}void printffromtail(plinknode phead)

else

printffromtail(phead->_next);

printf("%d->",phead->_data);

}void erasenohead(plinknode pos)

void insertnohead(plinknode pos, datatype x)

void joseph(plinknode phead,int length)

int times = length - 1;

while (times--)

del = cur->_next;

cur->_data = cur->_next->_data;//拷貝cur的下乙個結點的資料,刪除它

cur->_next = del->_next;

free(del);

}}void reverse(plinknode& phead)

phead = newhead;

}void combinetwolink(plinknode& firstphead, plinknode secondphead)

else

tmp->_next = cur->_next;

cur->_next = tmp;

cur = tmp;

}if (firstphead)

cur->_next = firstphead;

else

cur->_next = secondphead;

firstphead = finally->_next;

free(finally);

}void searchmid(plinknode phead)

printf("%d\n",slow->_data);

}plinknode searchknode(plinknode phead,int k)

if (k > 0)

return null;

while (fastk)

return phead;

}//void test1()

//void test2()

int main()

關於單鏈表的幾道題

思路 建立三個工作指標p,q,r,然後p遍歷整個鍊錶,p每到乙個結點,q就從這個結點往後遍歷,並與p的數值比較,相同的話就free掉那個結點.刪除單鏈表中重複結點的演算法 linklist removedupnode linklist l else q q next p p next return ...

關於單鏈表

單鏈表結構體 typedef struct student node 建立單鏈表 node create else p head while cycle else head head next p next null printf n yyy d head data return head 單鏈表測...

關於單鏈表的逆序

昨天的課後習題出現了乙個單鏈表的逆序問題,作為乙個志在成為程式媛的我,寫了我人生中的第一篇部落格。題目要求是 逆轉鍊錶,並返回逆轉後的頭結點。我們先考慮一下對於鍊錶逆序時可能會出現的情況 對於乙個空鍊錶 很明顯沒有資料,沒有內容,不需要逆序,之前return 對於只有乙個節點的鍊錶我們也是不需要考慮...