資料結構之 雙向鍊錶

2021-08-19 15:05:14 字數 4063 閱讀 1322

單鏈表的結點都只有乙個指向下乙個結點的指標。 

單鏈表的資料元素無法直接訪問其前驅元素。

建立鍊錶 

銷毀鍊錶 

獲取鍊錶長度 

清空鍊錶 

獲取第pos個元素操作 

插入元素到位置pos 

刪除位置pos處的元素

;dlinklist* dlinklist_creat(); //建立乙個鍊錶

void dlinklist_destory(dlinklist*list); //銷毀

void dlinklist_clear(dlinklist*list); //清空

int dlinklist_length(dlinklist*list); //返回長度

int dlinklist_insert(dlinklist*list,dlinklistnode*node,int pos);//插入

dlinklistnode*dlinklist_get(dlinklist*list,int pos);//得到乙個元素

dlinklistnode*dlinklist_delet(dlinklist*list,int pos);//刪除元素

//雙向鍊錶的新操作

dlinklistnode*dlinklist_deletnode(dlinklist*list,dlinklistnode* node);

dlinklistnode*dlinklist_reset(dlinklist*list);

dlinklistnode*dlinklist_current(dlinklist*list);

dlinklistnode*dlinklist_next(dlinklist*list);

dlinklistnode*dlinklist_pre(dlinklist*list);

#endif

#include "dlinklist.h"

typedef struct _tag_tdlinklist

tdlinklist;

dlinklist* dlinklist_creat()//´´½¨á´±í

return ret;

}void dlinklist_destory(dlinklist*list)

void dlinklist_clear(dlinklist*list)

}int dlinklist_length(dlinklist*list)

return ret;

}

int  dlinklist_insert(dlinklist*list,dlinklistnode*node,int pos)

next = current->next;

current->next = node;

node->next= next;

if(next != null)

node->pre= current;

if(slist->length ==0) //如果是空鍊錶的話

if(current = (dlinklistnode*)slist)  //如果插入的是第乙個元素

slist->length++;

}return ret;

}

dlinklistnode*dlinklist_get(dlinklist*list,int pos)

ret = current->next;

}return ret;

}dlinklistnode*dlinklist_delet(dlinklist*list,int pos)

ret = current->next;

next = ret->next;

//核心**

current->next = next;

if(next != null) //判斷next是不是最後乙個元素 也就是null

}if(slist->slider == ret) //如果刪除的是游標指向的位置,游標指向下乙個

slist->length--;

}return ret;

}dlinklistnode*dlinklist_deletnode(dlinklist*list,dlinklistnode* node)//刪除乙個元素

current=current->next; //移動位置

}if(ret != null) //如果沒找到 就不刪除 ,找到了進入迴圈

}return ret;

}dlinklistnode*dlinklist_reset(dlinklist*list)

return ret;

}dlinklistnode*dlinklist_current(dlinklist*list)

return ret;

}dlinklistnode*dlinklist_next(dlinklist*list)

return ret;

}dlinklistnode*dlinklist_pre(dlinklist*list)

return ret;

}

#include "dlinklist.h"

typedef struct _tag_value

value;

int main()

printf("\n");

dlinklist_delet(list,0);

dlinklist_delet(list,dlinklist_length(list)-1);

for(i=0;iv);

}printf("\n");

dlinklist_reset(list);

dlinklist_next(list);

pv = (value*)dlinklist_current(list);

printf("%d\n",pv->v);

dlinklist_deletnode(list,(dlinklistnode*)pv);

// dlinklist_next(list);

pv = ( value*)dlinklist_current(list);

printf("%d\n",pv->v);

dlinklist_pre(list);

pv =( value*)dlinklist_current(list);

printf("%d\n",pv->v);

dlinklist_clear(list);

// printf("hello world!\n");

return 0;

}

資料結構之雙向鍊錶

簡述 指標域有乙個指標 而言,占用資源更大,但相應的 雙向鍊錶遍歷的時候只需要乙個指標就可以,而且 只有得到其中任何乙個節點就是得到整個鍊錶,單向鍊錶必須得到他的頭節點,才能遍歷整個鍊錶,而且得有兩個指標。實現 bothwaylinklist.h ifndef mymodule h define m...

資料結構之雙向鍊錶

雙向鍊錶宛如一列火車,剛發明的時候只有乙個頭,如果它的行駛路線為 a b c d e f g h i j k a 這個時候有一批貨物需要從k運到j,那麼它的運輸路線一定是 k a b c d e f g h i j 所以後來火車就有了兩個頭,由此可見雙向鍊錶的重要性!雙向鍊錶 在單鏈表結點上增添了乙...

資料結構之雙向鍊錶

建立空鍊錶 list creat 摧毀鍊錶 in list 需要摧毀的鍊錶 void destroy list list 插入資料 頭插 in list 要插入的雙向鍊錶 in data 要插入的資料 bool insert head list list,data data 插入資料 尾插 in l...