2 另一種形式的單向鍊錶

2022-09-19 14:57:09 字數 2278 閱讀 2357

另一種形式的單向鍊錶

節點結構體並不儲存資料,只有乙個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實現每種型別的火車...

資訊共享的另一種形式 復用

共享的第一種形式是在不同人 不同部門 不同單位之間共享,這是大家經常理解的一種。而另一種共享形式大家可能不很注意,就是資料的縱向共享,歷史資料的使用也是一種共享。如果說前面的共享理解為廣度的共享,那麼後一種是深度共享。一次和搞工程設計專業的人聊天,說起原來非計算機畫圖時代,很辛苦,效率很低,而現在開...

另一種尊重

上中學的時候,有一節課印象非常深刻。老師問我們如果無意闖入乙個房間,發現房間裡有一位女士正在洗澡,這時應該怎麼辦?有同學回答就當什麼也沒看見,退出房間。還有同學回答 說聲對不起!女士。然後退出去。老師笑了笑說,還有更好的答案,那就是 對不起,先生!有一對結婚多年的夫妻,有一次出差在外的妻子有一件急事...