另一種形式的單向鍊錶
節點結構體並不儲存資料,只有乙個next指標元素。然後約定好資料結構體預留四個位元組(結構體定義時的最上方,位址的低四位元組)。當資料指標和節點指標互相轉換時,next元素就對映至資料預留的四位元組,即可用來做指標指向下一節點。這樣可以讓資料和鍊錶更分離,鍊錶可以不再維護資料。
#include#include//節點
struct linknode;
//管理節點
typedef structlinklisttype;
//初始化鍊錶
linklisttype* init_link()
//按位置插入資料
void insert_link(linklisttype* plist,int pos, void* data)
if(pos < 0 || pos > plist->m_size)
//將data轉成linknode型別,這樣linknode的低4位元組和data的低4位元組重合
struct linknode* mynode = data; //mynode既是要插入節點的指標,它的前4位元組又被提供出來做next欄位
struct linknode* currnode = &(plist->head);
//找到要插入位置的前驅節點
for(int i=0;inext;
}mynode->next = currnode->next; //要插入節點的next指向下一節點
currnode->next = mynode; //前驅節點的next指向要插入的節點
plist->m_size++;
}//遍歷
void foreach_link(linklisttype* plist,void(*myforeach)(void*))
struct linknode* currnode = &plist->head;
for(int i=0;im_size;i++)
}//通過位置刪除鍊錶節點
void remove_link(linklisttype* plist, int pos)
if(pos < 0 || pos >= plist->m_size)
//找到位置的前置節點
struct linknode* currnode = &plist->head;
for(int i=0; inext;
}//記錄要刪除的資料
struct linknode* delnode = currnode->next;
//修改指向,將前驅節點的next指向 要刪除節點 的後驅節點
currnode->next = delnode->next;
//不要在這裡釋放delnode,鍊錶不維護資料
plist->m_size--;
}//清空鍊錶
void clear_link(linklisttype* plist)
struct linknode* currnode = &plist->head;
struct linknode* delnode = null;
for(int i=0; im_size; i++)
plist->m_size = 0;
}//按照約定,資料的低4位元組儲存next指標
struct persion;
void myforeach(void* data)
int main();
struct persion p2 = ;
struct persion p3 = ;
insert_link(plist,0,&p1);
insert_link(plist,0,&p2);
insert_link(plist,1,&p3);
foreach_link(plist,myforeach);
remove_link(plist,1);
printf("------------------------\n");
foreach_link(plist,myforeach);
clear_link(plist);
printf("------------------------\n");
foreach_link(plist,myforeach);
free(plist);
return 0;
}
行列轉換的另一種形式
在實際做專案的時候遇到這樣乙個問題 資料庫表裡儲存了每個火車站每種型別的火車票銷售數量,但是有的火車站可能不銷售動車票或者高鐵票,最終的結果要如圖2所示,不銷售型別的火車票就空出來。本文採用master.dbo.spt values動態生成最大數目的列頭,然後採用case when實現每種型別的火車...
資訊共享的另一種形式 復用
共享的第一種形式是在不同人 不同部門 不同單位之間共享,這是大家經常理解的一種。而另一種共享形式大家可能不很注意,就是資料的縱向共享,歷史資料的使用也是一種共享。如果說前面的共享理解為廣度的共享,那麼後一種是深度共享。一次和搞工程設計專業的人聊天,說起原來非計算機畫圖時代,很辛苦,效率很低,而現在開...
另一種尊重
上中學的時候,有一節課印象非常深刻。老師問我們如果無意闖入乙個房間,發現房間裡有一位女士正在洗澡,這時應該怎麼辦?有同學回答就當什麼也沒看見,退出房間。還有同學回答 說聲對不起!女士。然後退出去。老師笑了笑說,還有更好的答案,那就是 對不起,先生!有一對結婚多年的夫妻,有一次出差在外的妻子有一件急事...